JDK10的新特性:var和匿名类

简介: JDK10的新特性:var和匿名类

目录



简介


匿名类相信大家都用过了,学过JDK8中的lambda表达式之后,可以发现有些匿名类是可以用lambda表达式来替代的,能够被替代的类叫做funcational interface。


具体的有关lambda表达式和匿名类的介绍,大家可以查阅我之前写的文章。这里就不多讲了。


本文主要介绍var和匿名类之间的一些平时没有注意到的问题。


更多内容请访问www.flydean.com


匿名类中自定义变量


我们看一个经常使用的Runnable匿名类:


Runnable runnable = new Runnable() {
String className=Thread.currentThread().getName();
@Override
public void run() {
    log.info("inside runnable");
    }
};


和平常使用的Runable不一样的是,我们为匿名类添加了一个变量叫做className。


因为Runnable接口并没有定义如何去访问这个新创建的className字段,所以使用runnable.className是会编译错误的。


但是如果我们将Runnable替换成为var:


var runnable = new Runnable() {
            String className=Thread.currentThread().getName();
            @Override
            public void run() {
                log.info("inside runnable");
            }
        };
        log.info(runnable.className);


可以看到神奇的事情发生了,var变量可以访问到className。


lambda表达式中的匿名类


我们经常在Stream的遍历和处理中使用lambda表达式,但是可能很少有人在lambda表达式中使用匿名类。


没关系,下面我们再举个例子:


List<Object> objects=Stream.of(1,2,3,4).map(i-> new Object(){
            int count=i;
        }).filter(o -> o.count >0)
                .collect(Collectors.toList());
       log.info("{}",objects);


上面的例子中,我们创建了一个stream,在map的过程中返回了新创建的匿名Object,在匿名Object内部我们定义了一个叫做count的变量。


注意在接下来的filter中,我们实际上是可以直接使用map中创建的Object,并且可以直接访问其新定义的count变量。


总结


本文讲解了var变量中一些不为人知的小技巧,同时介绍了在lambda表达式中的匿名类的使用,希望大家能够喜欢。

相关文章
|
1月前
|
Java Go Scala
jdk10的var局部变量类型推理
本文介绍了JDK 10中引入的局部变量类型推断功能,即`var`关键字,它允许开发者在声明具有初始值的局部变量时省略显式类型,以简化代码并提高可读性。
13 1
jdk10的var局部变量类型推理
|
2月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
45 3
|
1月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
19 0
|
2月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
3月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
3月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
3月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
3月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
2月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
14 0
|
3月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化