Lambda表达式语法进阶
方法引用
静态方法和非静态方法引用
lambda的方法引用:可以快速的将一个Lambda表达式的实现指向一个已经实现的方法。
语法:方法的隶属者::方法名。
::操作符分隔方法名与对象名或类名
比如:静态方法是属于类的的,所以就是类名::方法名
对应的 : 非静态方法是属于对象的,所以就是对象::方法名主要有三种情况:
- object::instanceMethod
- Class::staticMethod
- Class::instanceMethod
下面给出一段代码示例:
public class Stest3{
public static void main(String[] args) {
UserTest lambda1=a->change(a);
//方法引用:引用了change方法的实现 静态方法属于类
UserTest lambda2=Stest3::change(a)
}
private static int change(int a){
return a*2;
}
}
interface UserTest{
public int test(int a);
}
构造方法应用(构造器引用)
对于构造方法:
看下面的代码示例:
package lambda;
public class Stest2 {
public static void main(String[] args) {
PersonCreater creater=()->{
return new Person();
};
//简单语法形式
PersonCreater creater1=()->new Person();
//构造方法的引用:
//调用哪个构造方法取决于接口中的方法有无参数
PersonCreater creater2=Person::new;
Person a=creater2.getPerson();//引用无参构造方法
PersonCreater1 creater3=Person::new;
Person b=creater3.getPerson("xiaoming",10);//引用有参构造方法
}
}
interface PersonCreater{
Person getPerson();
}
interface PersonCreater1{
Person getPerson(String name,int age);
}
package lambda;
public class Person {
public String name;
public int age;
public Person() {
System.out.println("Person类的无参构造方法执行了");
}
public Person(String name,int age) {
this.name=name;
this.age=age;
System.out.print("Person类的有参构造方法执行了");
}
}
由上面的代码示例可知,构造器引用和静态非静态方法引用很类似,只不过方法名为new。