Java8新特性
https://www.jianshu.com/p/0bf8fe0f153b
-
函数式接口 : 有且仅有一个抽象方法,但是可以有多个非抽象方法(静态方法、default方法)的接口,函数式接口可以被隐式转换为lambda表达式。
可以通过在接口上加上@FunctionalInterface 来显示声明这是个函数式接口,这样你多写一个抽象方法的时候,会在编写的时候就开始报错 而当接口中重写了object中的方法,但没有写实现,这个抽象方法不算入有且仅有一个抽象方法里面,比如: @FunctionalInterface public interface Comparator<T> 就有int compare(T o1, T o2); 和 boolean equals(Object obj); 但第二个方法不算入函数式接口中有且仅有一个抽象方法里面 Lambda表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
-
接口的默认方法
-
Lambda 表达式 (Lambda 表达式里面用到的参数 会被隐式地声明为final)
-
Stream
是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。对数据进行 Filter**过滤、Sort** 排序、**Map** 映射、**Match** 匹配
-
方法与构造函数引用 ::
// 前一节中的代码还可以通过静态方法引用来表示: Converter<String, Integer> converter = Integer::valueOf; Integer converted = converter.convert("123"); System.out.println(converted); // 123
-
多重注解
在Java 8中支持多重注解了,先看个例子来理解一下是什么意思。首先定义一个包装类Hints注解用来放置一组具体的Hint注解: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8允许我们把同一个类型的注解使用多次,只需要给该注解标注一下@Repeatable即可。 例 1: 使用包装类当容器来存多个注解(老方法) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} 例 2:使用多重注解(新方法) @Hint("hint1") @Hint("hint2") class Person {}