static 方法引用
public interface Find {
public int toFind();
}
public class MyClass {
public static int myFind() {
//do something...
}
}
我们想要快捷的利用MyClass
中的myFind()
来实现Find
接口,我们可以这样:
Find finder = MyClass::myFind();
构造方法引用
public interface Factory {
public String create(char[] chars);
}
Factory factory = String::new;
参数方法引用
public interface Find {
public int toFind(String s1, String s2);
}
Find finder = String::indexOf
这种用法值得注意一下,String#indexOf
并不是static
方法,但是却能使用String::indexOf
的方式来使用,原因是toFind(String s1, String s2
需要两个参数,第一个为String
,第二个也是String
,于是,编译器会帮你自动识别,将上面的lambda转换为:
Find finder = (s1, s2) -> s1.indexOf(s2);
String::indexOf()
只需要一个参数,Find#toFind()
需要两个参数,因此Find#toFind()
的第一个参数可以理解为调用String::indexOf()
的对象。
实例方法引用
public interface Find {
public int toFind(String s);
}
public class MyClass {
public int myFind(String s) {
//do something...
}
}
````java
Myclass obj = new MyClass();
Find finder = obj::myFind;