普通方法的引用
将lambda表达式的实现指向一个已经实现的方法,换句话说就是将lambda的实现抽取到一个方法中。 方法引用分为静态方法引用和非静态方法引用
静态方法引用
public static void main(String[] args) {
//方法引用
//有参有返回值
// LambdaSingleReturnSingleParam test02 = x ->x*2;
LambdaSingleReturnSingleParam test01 = x -> take(x);
System.out.println(test01.test(10));
}
private static int take(int x){
//DO......
return x*2;
}
上面的引用方式还可以继续简化
LambdaSingleReturnSingleParam test02 = Test3::take;
非静态方法引用
LambdaSingleReturnSingleParam test03 = x->new Test3().take2(x);
private int take2(int x){
return x*2;
}
语法格式
静态方法的引用格式:
类名::方法名
非静态方法的引用格式:
参数列表->所在类的实例.方法的调用
构造方法的引用
构造方法的引用分为无参构造方法引用和有参构造方法引用,为了验证这两种引用,需要创建一个Person类,有两个参数和两个构造方法。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("有参构造方法");
}
public Person() {
System.out.println("无参构造方法");
}
}
首先是无参构造函数的引用,定义一个接口IPerson
interface IPerson{
Person getPerson();
}
通过这个接口,使用Lambda有三种方式可以实现无参构造方法的引用
// 1. 采用标准写法,直接返回一个new Person()
IPerson iPerson = ()->{
return new Person();
};
// 2. 采用简写方式,省去参数列表、大括号以及return
IPerson iPerson = ()->new Person();
// 3. 直接使用要引用的构造函数的类名+双冒号+new关键字
IPerson iPerson = Person::new;
iPerson.getPerson();
接下来是有参构造函数的引用,定义一个接口IPerson2
interface IPerson2{
Person getPerson(String name,int age);
}
有参构造方法的引用方法与无参相同,只需把无参时使用的接口换成有参接口并且给参数传值即可
IPerson2 iPerson2 = Person::new;
iPerson2.getPerson("henkun",20);
注:lambda通过接口中定义的抽象方法是否有参来决定是调用对象的有参还是无参构造方法