Java8新特性 - 方法引用&默认方法
原创2019/10/25...大约 1 分钟
方法引用
在Java8中允许将lambda表达式作为参数传递给函数式接口,但如果需要将已存在的方法传递给函数式接口,就要使用方法引用,其语法是使用一对冒号::。例如:
List<String> countries = Arrays.asList("China", "Canada", "France", "Spain");
countries.forEach(System.out::println);等同于:
List<String> countries = Arrays.asList("China", "Canada", "France", "Spain");
for (country : countries) {
System.out.println(country);
}通常方法引用结合forEach 能让代码更简洁,可以直接引用类方法,也可以使用对象来引用方法,但要求引用的方法必须与相应的函数式接口是兼容的,看看上例中forEach的接口定义:
public interface Iterable<T> {
......
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}其入参是Consumer<? super T> action与System.out.pringln(String)兼容,故可以进行引用。
特别地,如果要引用构造方法,可以使用Class::new。
默认方法
Java8提供了默认方法这个特性,只需要在方法前加上default 标识符,如上面的forEach方法。
- 默认方法只适用于interface
- 默认方法可以有实现(其本意就是要提供一个默认实现)
- 一个interface中可以有多个默认方法