文章目录

  • 简介
  • 匿名类中自定义变量
  • 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和匿名类相关推荐

  1. JDK10的新特性:var泛型和多个接口实现

    文章目录 简介 实现多个接口 使用多个接口 使用var 总结 简介 在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var. 今天我们来深入的考虑一下var和泛型,多个接 ...

  2. C++11新特性中的匿名函数Lambda表达式的汇编实现分析(二)

    2019独角兽企业重金招聘Python工程师标准>>> C++11新特性中的匿名函数Lambda表达式的汇编实现分析(一) 首先,让我们来看看以&方式进行变量捕获,同样没有参 ...

  3. Java 新特性前瞻:封印类

    本文要点: 1.即将于 2020 年 9 月发布的 Java SE 15 将引入"封印类(sealed class)"(JEP 360),并将其作为预览特性. 2.封印类是一种类或 ...

  4. Java8新特性总结 - 2.Optional类

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  5. JDK10的新特性:本地变量类型var

    文章目录 简介 为什么我们需要var var使用在什么地方 var不能用在什么地方 其他var的特点 总结 简介 java以面向对象的特性显著于世并得到了蓬勃的发展.在语言的发展过程中,为了让java ...

  6. c++新特性11 (12)weak_ptr类定义

    1. 类定义 // CLASS TEMPLATE weak_ptr template <class _Ty> class weak_ptr : public _Ptr_base<_T ...

  7. Java 8 新特性001_Java 8 Optional 类

    Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保 ...

  8. java jdk1.6的新特性 DeskTop SystemTray Console类 Compiler API Http Server API

    DeskTop DeskTop类允许一个Java应用程序启动本地的另一个应用程序去处理URI或文件请求 Desktop desktop=Desktop.getDesktop(); //判断是否支持桌面 ...

  9. Jdk8新特性一:jdk8新特性之default关键字、日期类、Base64类、Optional

    Jdk8新特性一:jdk8新特性之default关键字.日期类.Base64类.Optional 文章目录 Jdk8新特性一:jdk8新特性之default关键字.日期类.Base64类.Option ...

最新文章

  1. 小米3 开发人员选项
  2. java的total_Java LabelResourcePool.totalNum方法代码示例
  3. 因为代言一款游戏 罗永浩和网友吵起来了
  4. No JVM could be found on your system解决方法
  5. python 线程池回收_python实现线程池
  6. 通过NSString初始化OC类
  7. Python将txt文件变为excel文件
  8. Binder运行机制的流程图
  9. 博客排名400-300的数据变化
  10. django -- url 的 命名空间
  11. python游戏引擎-转:十大开源游戏引擎深入比较
  12. jic标准_JIC螺纹技术资料.doc
  13. 致敬逆行者网页设计作品 抗疫感动专题网页设计模板 疫情感动人物静态HTML网页模板下载
  14. 电子计算机最早的应用,电子计算机的最早应用领域是什么?
  15. 自己动手 DIY 一个读写200MB/s 的高速 U 盘
  16. PS像素,分辨率的概念
  17. Linux无线网卡配置 intel 9462 网卡 速度无法超过54Mbit
  18. 信息安全——ELGamal数字签名方案的实现
  19. 信息安全技术——(三)标识与认证技术
  20. f2fs系列文章truncate

热门文章

  1. Linux服务-Samba文件服务器部署
  2. 力扣题458:可怜的小猪
  3. gh0st源码分析:屏幕监控
  4. cocos2d-x游戏实例(25)-简易动作游戏(3)
  5. WinSock2编程之打造完整的SOCKET池
  6. SQLLite (三):sqlite3_get_table,sqlite3_free_table
  7. 我在 Go 圈儿里的几位老朋友
  8. 再见了 Docker!Go 落地的 K8S 云原生架构已成气候!
  9. 【今晚七点半】:爱奇艺DRM探索之路
  10. 剑指offer之46-50题解