相等的的 lambda 表达式HighTemp::lessThanTemp
is
(highTemp1, highTemp2) -> {
return highTemp1.lessThanTemp(highTemp2);
}
这是其特点之一Java8
named 对特定类型的任意对象的实例方法的引用 https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
考虑下面的例子,
interface FIface<T> {
int testMethod(T a, T b);
}
class Test2 {
private String str;
Test2(String str) {
this.str = str;
}
int ok(Test2 test2) {
System.out.println("Currnet String : "+ this.str);//Refer to t1
System.out.println("Test String : "+test2.str);//Refer to t2
return 0;
}
}
public class Test {
public static <T> int checkCall(T t1, T t2, FIface<T> fiFace) {
//Here Test2 :: ok is equivalent to t1.ok(t2)
return fiFace.testMethod(t1, t2);
}
public static void main(String[] args) {
checkCall(new Test2("a"), new Test2("b"), Test2 :: ok);
}
}
OUTPUT
Currnet String : a
Test String : b
这里请注意Test2 :: ok
甚至对通话有效ok
方法不是静态的。
当你调用该方法时checkCall
对于函数式接口,你仍然有两个参数:t1
and t2
对于有效的 lambda 表达式,其参数可以为(Test t1, Test t2)
所以你的方法Test2 :: ok
这里对调用有效。在内部它是这样工作的t1.ok(t2)
.
So, fiFace.testMethod(t1, t2);
将调用方法为t1.ok(t2)