当前时间:2019年 11月 11日,距离 JDK 14 发布时间(2020年3月17日)还有多少天?

// 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate.of(2020, 3, 17); LocalDate nowDate = LocalDate.now(); System.out.println("距离JDK 14 发布还有:"+nowDate.until(jdk14,ChronoUnit.DAYS)+"天");

1. 前言

Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言、库、工具、JVM 等方面的新特性。比如提供了语言级的匿名函数,也就是被官方称为 Lambda 的表达式语法(外界也称为闭包,Lambda 的引入也让流式操作成为可能,减少了代码编写的复杂性),比如函数式接口,方法引用,重复注解。再比如 Optional 预防空指针,Stearm 流式操作,LocalDateTime 时间操作等。

在前面的文章里已经介绍了 Java 8 的部分新特性。

  1. Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下?

  2. Jdk14都要出了,还不能使用 Optional优雅的处理空指针?

这一次主要介绍一下 Lambda 的相关情况。

2. Lambda 介绍

Lambda 名字来源于希腊字母表中排序第十一位的字母 λ,大写为Λ,英语名称为 Lambda。在 Java 中 Lambda 表达式(lambda expression)是一个匿名函数,在编写 Java 中的 Lambda 的时候,你也会发现 Lambda 不仅没有函数名称,有时候甚至连入参和返回都可以省略,这也让代码变得更加紧凑。

3. 函数接口介绍

上面说了这次是介绍 Lambda 表达式,为什么要介绍函数接口呢?其实 Java 中的函数接口在使用时,可以隐式的转换成 Lambda 表达式,在 Java 8中已经有很多接口已经声明为函数接口,如 Runnable、Callable、Comparator 等。

函数接口的例子可以看下 Java 8 中的 Runnable 源码(去掉了注释)。

package java.lang;  @FunctionalInterface public interface Runnable {     public abstract void run(); }

那么什么样子的接口才是函数接口呢?有一个很简单的定义,也就是只有一个抽象函数的接口,函数接口使用注解 @FunctionalInterface 进行声明(注解声明不是必须的,如果没有注解,也是只有一个抽象函数,依旧会被认为是函数接口)。多一个或者少一个抽象函数都不能定义为函数接口,如果使用了函数接口注解又不止一个抽象函数,那么编译器会拒绝编译。函数接口在使用时候可以隐式的转换成 Lambda 表达式。