Java 8承诺要调整Java编程向着函数式风格迈进,并且在语法、编译器、类库以及Java虚拟机等方面都带来了许多新特性。本节将介绍Java 8的部分新特性。

      Java 8的一个最大亮点就是Lambda表达式,它将函数式编程引入到Java语言中。一个Lambda表达式由以下三部分组成。

      (1)用逗号分隔的参数列表;

      (2)箭头符号(–>);

      (3)函数体(表达式或代码块)。

      可以转为等价的Lambda表达式:

      在Java 8中,可以使用default关键字在接口中定义默认方法,并提供默认的实现。之后,该接口的所有实现类都会默认地使用该实现方法。当然,实现类也可以对该默认方法进行重写。例如:

      此外,还可以在接口中定义静态方法,并提供默认实现。例如:

    1. public interface MyInterface {
    2. static String myFunction() {
    3. return "hello world";
    4. }

      Java 8还允许使用::来引用一个已经存在的方法,其语法如下:

      注意:只写方法名即可,不需要写括号。

    表10.1 引用的类型 |类 型 |示 例| | —— | —— | |引用静态方法 |ContainingClass::staticMethodName| |引用某个对象的实例方法 |ContainingObject::instanceMethodName| |引用某个类型的任意对象的实例方法 |ContainingType::methodName| |引用构造方法 |ClassName::new|

      自从Java 5引入了注解以后,注解就被广泛应用于各个框架之中。但Java 5引入的注解存在一个问题:在同一个地方不能多次使用同一个注解。而Java 8就打破了这个限制,引入了重复注解的概念,允许在同一个地方多次使用同一个注解。

      在Java 8中使用@Repeatable注解定义重复注解,代码示例如下:

    1. @Repeatable(Authorities.class)
    2. public @interface Authority {
    3. String role();
    4. }
    5. public @interface Authorities {
    6. public class RepeatAnnotationUseNewVersion {
    7. @Authority(role="Admin")
    8. @Authority(role="Manager")
    9. public void doSomeThing(){ }
    10. }

      在创建重复注解Authority时,加上@Repeatable并指向用于存储的注解Authorities。之后,在使用的时候,就可以重复使用Authority注解。

      Java 8还提供了Function、Supplier、Optional、Predicate、Consumer 等接口用于简化代码,提供了Nashorn引擎便于在JVM上运行JavaScript代码,提供了新的Date API,提供了对高并发的新支持,提供了更好的类型推测机制,提供了类依赖分析器jdeps……