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表达式本质上是一个匿名方法,例如以下代码:

  1. public int add(int num1, int num2) {
  2. return num1 + num2;
  3. }

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

  1. (int x, int y) -> x + y;

10.7.2 接口的默认方法与静态方法

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

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

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

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

10.7.3 方法引用

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

  1. 类名::方法名

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

  具体地讲,共有如表10.1所示的四种类型的引用。

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

10.7.4 重复注解

  自从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. Authority[] value();
  7. }
  8. public class RepeatAnnotationUseNewVersion {
  9. @Authority(role="Admin")
  10. @Authority(role="Manager")
  11. public void doSomeThing(){ }
  12. }

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

10.7.5 其他特性

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

  不难看出,Java 8的升级必然会对日后的开发带来重大影响。因此,建议大家在课后一定要多浏览技术文章,多上机实践,时刻坚持学习,不断提高自己的技术水平。