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