JDK10的新特性:var和匿名类
文章目录
- 简介
- 匿名类中自定义变量
- lambda表达式中的匿名类
- 总结
简介
匿名类相信大家都用过了,学过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();@Overridepublic 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表达式中的匿名类的使用,希望大家能够喜欢。
本文的例子[https://github.com/ddean2009/
learn-java-base-9-to-20](https://github.com/
ddean2009/learn-java-base-9-to-20)
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
本文作者:flydean程序那些事
本文链接:http://www.flydean.com/jdk10-var-anonymous-class/
本文来源:flydean的博客
欢迎关注我的公众号:程序那些事,更多精彩等着您!
JDK10的新特性:var和匿名类相关推荐
- JDK10的新特性:var泛型和多个接口实现
文章目录 简介 实现多个接口 使用多个接口 使用var 总结 简介 在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var. 今天我们来深入的考虑一下var和泛型,多个接 ...
- C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)
2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...
- Java 新特性前瞻:封印类
本文要点: 1.即将于 2020 年 9 月发布的 Java SE 15 将引入"封印类(sealed class)"(JEP 360),并将其作为预览特性. 2.封印类是一种类或 ...
- Java8新特性总结 - 2.Optional类
所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...
- JDK10的新特性:本地变量类型var
文章目录 简介 为什么我们需要var var使用在什么地方 var不能用在什么地方 其他var的特点 总结 简介 java以面向对象的特性显著于世并得到了蓬勃的发展.在语言的发展过程中,为了让java ...
- c++新特性11 (12)weak_ptr类定义
1. 类定义 // CLASS TEMPLATE weak_ptr template <class _Ty> class weak_ptr : public _Ptr_base<_T ...
- Java 8 新特性001_Java 8 Optional 类
Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保 ...
- java jdk1.6的新特性 DeskTop SystemTray Console类 Compiler API Http Server API
DeskTop DeskTop类允许一个Java应用程序启动本地的另一个应用程序去处理URI或文件请求 Desktop desktop=Desktop.getDesktop(); //判断是否支持桌面 ...
- Jdk8新特性一:jdk8新特性之default关键字、日期类、Base64类、Optional
Jdk8新特性一:jdk8新特性之default关键字.日期类.Base64类.Optional 文章目录 Jdk8新特性一:jdk8新特性之default关键字.日期类.Base64类.Option ...
最新文章
- 小米3 开发人员选项
- java的total_Java LabelResourcePool.totalNum方法代码示例
- 因为代言一款游戏 罗永浩和网友吵起来了
- No JVM could be found on your system解决方法
- python 线程池回收_python实现线程池
- 通过NSString初始化OC类
- Python将txt文件变为excel文件
- Binder运行机制的流程图
- 博客排名400-300的数据变化
- django -- url 的 命名空间
- python游戏引擎-转:十大开源游戏引擎深入比较
- jic标准_JIC螺纹技术资料.doc
- 致敬逆行者网页设计作品 抗疫感动专题网页设计模板 疫情感动人物静态HTML网页模板下载
- 电子计算机最早的应用,电子计算机的最早应用领域是什么?
- 自己动手 DIY 一个读写200MB/s 的高速 U 盘
- PS像素,分辨率的概念
- Linux无线网卡配置 intel 9462 网卡 速度无法超过54Mbit
- 信息安全——ELGamal数字签名方案的实现
- 信息安全技术——(三)标识与认证技术
- f2fs系列文章truncate