Method Reference
方法引用就是将一个已实现的方法,直接作为接口中抽象方法的实现(当然前提是方法定义得一样才行)
public interface Study {
int sum(int a, int b); //待实现的求和方法
}那么使用时候,可以直接使用Lambda表达式:
public static void main(String[] args) {
Study study = (a, b) -> a + b;
}只不过还能更简单,因为Integer类中默认提供了求两个int值之和的方法:
//Integer类中就已经有对应的实现了
public static int sum(int a, int b) {
return a + b;
}此时,我们可以直接将已有方法的实现作为接口的实现:
public static void main(String[] args) {
Study study = (a, b) -> Integer.sum(a, b); //直接使用Integer为我们通过好的求和方法
System.out.println(study.sum(10, 20));
}我们发现,Integer.sum的参数和返回值,跟我们在Study中定义的完全一样,所以说我们可以直接使用方法引用:
public static void main(String[] args) {
Study study = Integer::sum; // 使用双冒号来进行方法引用,静态方法使用 类名::方法名 的形式
System.out.println(study.sum(10, 20));
}方法引用其实本质上就相当于将其他方法的实现,直接作为接口中抽象方法的实现。任何方法都可以通过方法引用作为实现:
public interface Study {
String study();
}如果是普通从成员方法,我们同样需要使用对象来进行方法引用:
public class Main{
public static void main(String[] args) {
Main main = new Main();
Study study = main::lbwnb; //成员方法因为需要具体对象使用,所以说只能使用 对象::方法名 的形式
}
public String lbwnb(){
return "卡布奇诺今犹在,不见当年倒茶人。";
}
}因为现在只需要一个String类型的返回值,由于String的构造方法在创建对象时也会得到一个String类型的结果,所以说:
public static void main(String[] args) {
Study study = String::new; //没错,构造方法也可以被引用,使用new表示
}反正只要是符合接口中方法的定义的,都可以直接进行方法引用,对于Lambda表达式和方法引用,在Java新特性介绍篇视频教程中还有详细的讲解,这里就不多说了。