- landscape
Java8的lambda引入了三种方法引用,构造器引用,及数组引用,以减少代码的开发。需要注意的是,如果需要使用此特性,必须方法返回值类型、参数数量与类型与函数式接口保持一致。
- 实例
- 对象 - 实例方法使用场景
当对象的实例方法已经实现了函数式接口将要实现的功能,且实例方法的参数数量、参数类型、返回类型与函数式接口一致时,可以使用此特性。使用方式为:
对象::方法名
/**
* @author: zhuocc2
* @date: 2019-09-02 4:53:18 PM
* @Package: lambda
* @Description: 对象 - 实例方法 使用场景。
* 当已经实例的方法已经实现了lambda将要实现的功能,可以使用此方式。
* 但需要lambda函数式接口的参数与返回值与实例方法的参数与返回值相同
* 使用方式 对象::方法名
*/
@Test
public void objectInstance() {
PrintStream sysOut = System.out;
Consumer<String> consumer = sysOut::println;
consumer.accept("对象-实例方法运用");
}
输出
对象-实例方法运用
- 类 - 静态方法使用场景
当类的静态方法已经实现了函数式接口将要实现的功能,且实例方法的参数数量 、参数类型、返回类型与函数式接口一致时,可以使用此特性。使用方式为:
类::方法名
/**
* @author: zhuocc2
* @date: 2019-09-02 5:27:39 PM
* @Package: lambda
* @Description: TODO 类 - 静态方法 使用场景
* 当类里已经实现了lambda将要实现的功能,可以使用此方式。只需参数与返回与lambda函数式接口保持一致即可。
* 使用方式 类名::方法名
*/
@Test
public void classStaticMethod() {
Comparator<Integer> comparator = Integer::compare;
System.out.println(comparator.compare(2, 1));
}
输出
1
- 类 - 实例方法使用场景
当实例方法的第一个参数为实例方法的调用者,第二个参数为实例方法的参数时,且实例方法的参数数量与类型、返回值类型与函数式接口一致时,可以使用此特性。使用方式为:
类::方法名
@Test
public void classInstance() {
BiPredicate<String, String> bp = String::equals;
boolean test = bp.test("2", "2");
System.out.println(test);
}
输出
true
- 构造器引用使用场景
当构造器的参数列表与函数式接口的参数列表一致时,可以使用此特性。使用方式为:
public class TestConstruct {
private String str = null;
public TestConstruct(String str) {
this.str = str;
System.out.println(str);
}
public TestConstruct(String str1, String str2) {
System.out.println(str1 + str2);
}
public String getStr() {
return this.str;
}
}
/**
* @author: zhuocc2
* @date: 2019-09-03 9:24:04 PM
* @Package: lambda
* @Description: TODO 构造器引用
*/
@Test
public void constructReference() {
Function<String, TestConstruct> fun = TestConstruct::new;
TestConstruct construct = fun.apply("str");
System.out.println(construct.getStr());
}
输出
str
str
- 数组引用
/**
* @author: zhuocc2
* @date: 2019-09-03 9:30:22 PM
* @Package: lambda
* @Description: TODO 数组引用
*/
@Test
public void arrayReference() {
Function<Integer, Float[]> fun = Float[]::new;
Float[] array = fun.apply(20);
System.out.println(array.length);
}
输出
20