Java 8承诺要调整Java编程向着函数式风格迈进,并且在语法、编译器、类库以及Java虚拟机等方面都带来了许多新特性。本节将介绍Java 8的部分新特性。
Java 8的一个最大亮点就是Lambda表达式,它将函数式编程引入到Java语言中。一个Lambda表达式由以下三部分组成。
(1)用逗号分隔的参数列表;
(2)箭头符号(–>);
(3)函数体(表达式或代码块)。
可以转为等价的Lambda表达式:
在Java 8中,可以使用default关键字在接口中定义默认方法,并提供默认的实现。之后,该接口的所有实现类都会默认地使用该实现方法。当然,实现类也可以对该默认方法进行重写。例如:
此外,还可以在接口中定义静态方法,并提供默认实现。例如:
public interface MyInterface {
static String myFunction() {
return "hello world";
}
Java 8还允许使用::来引用一个已经存在的方法,其语法如下:
注意:只写方法名即可,不需要写括号。
表10.1 引用的类型 |类 型 |示 例| | —— | —— | |引用静态方法 |ContainingClass::staticMethodName| |引用某个对象的实例方法 |ContainingObject::instanceMethodName| |引用某个类型的任意对象的实例方法 |ContainingType::methodName| |引用构造方法 |ClassName::new|
自从Java 5引入了注解以后,注解就被广泛应用于各个框架之中。但Java 5引入的注解存在一个问题:在同一个地方不能多次使用同一个注解。而Java 8就打破了这个限制,引入了重复注解的概念,允许在同一个地方多次使用同一个注解。
在Java 8中使用@Repeatable注解定义重复注解,代码示例如下:
@Repeatable(Authorities.class)
public @interface Authority {
String role();
}
public @interface Authorities {
public class RepeatAnnotationUseNewVersion {
@Authority(role="Admin")
@Authority(role="Manager")
public void doSomeThing(){ }
}
在创建重复注解Authority时,加上@Repeatable并指向用于存储的注解Authorities。之后,在使用的时候,就可以重复使用Authority注解。
Java 8还提供了Function、Supplier、Optional、Predicate、Consumer 等接口用于简化代码,提供了Nashorn引擎便于在JVM上运行JavaScript代码,提供了新的Date API,提供了对高并发的新支持,提供了更好的类型推测机制,提供了类依赖分析器jdeps……