适用类型:接口的实现,接口且只有一个方法。
对象引用:对Lambda的再次精简
特征:1.返回值一致;2.参数列表对应(特殊方法除第一个参数后);
- 实例方法引用:接口的抽象方法参数 和 接口的抽象方法体内对象调用的方法参数一致且返回类型一致。
// 1.匿名内部类
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
// 2.简化Lambda
Consumer<String> consumer2 = s -> System.out.println(s);
// 3.实例方法引用
Consumer<String> consumer3 = System.out::println;
- 静态方法引用:接口的抽象方法参数 和 接口的抽象方法体内类名调用的静态方法参数一致且返回类型一致。
// 匿名内部类
Function<Double, Long> function = new Function<>() {
@Override
public Long apply(Double aDouble) {
return Math.round(aDouble);
}
};
// 简化Lambda
Function<Double, Long> function2 = aDouble -> Math.round(aDouble);
// 静态方法引用
Function<Double, Long> function3 = Math::round;
- 特殊方法引用:接口中抽象方法的第一个形参作为方法的调用对象,且从第二个开始(或无参)可以对应到被调用实例方法的参数列表中,且返回类型一致。
// 匿名内部类
Comparator<Double> comparator = new Comparator<>() {
@Override
public int compare(Double o1, Double o2) {
return o1.compareTo(o2);
}
};
// 简化Lambda
Comparator<Double> comparator2 = (o1, o2) -> o1.compareTo(o2);
// 特殊方法引用
Comparator<Double> comparator3 = Double::compare;
- 构造方法引用:创建对象所调用构造方法参数列表 和 接口中方法的形参列表一致 且返回类型一致。
// 匿名内部类
Function<String, Person> function = new Function<>() {
@Override
public Person apply(String s) {
return new Person(s);
}
};
// 简化Lambda
Function<String, Person> function2 = s -> new Person(s);
// 特殊方法引用
Function<String, Person> function3 = Person::new;
- 数组构造方法引用:创建并返回指定类型的数组;重写的方法有且只有一个整数型的参数,且该参数就是用于设置数组的空间长度,返回类型和创建数组的类型保持一致。类似构造方法引用。
// 匿名内部类
Function<Integer, int[]> integerFunction = new Function<>() {
@Override
public int[] apply(Integer number) {
return new int[number];
}
};
// 简化Lambda
Function<Integer, int[]> integerFunction2 = number -> new int[number];
// 数组构造方法引用
Function<Integer, int[]> integerFunction3 = int[]::new;