Về chỗ mình bị confuse trong bài, là chỗ method reference tới instance với static method ấy, tóm lại là như này.
Với reference tới static method, thì chỉ có match lambda param vào đúng với method param.
class Test {
public static checkAge(int age) {
return age > 18;
}
}
...
// Lambda có 1 param, ứng với checkAge() có 1 param
Predicate<Integer> check = Test::checkAge;
Nhưng khi reference tới instance method, sẽ có 2 trường hợp sau:
Lấy ví dụ nhé cho dễ hiểu hai trường hợp trên.
// Trường hợp 1
class Test {
public int length(String str) {
return str.length;
}
}
...
// Trường hợp 1 dùng object bên ngoài
// Thì lambda param sẽ đưa vô trong method param luôn
Function<String, Integer> getLength = new Test()::length;
// Trường hợp 2 dùng tên class của lambda param
// Lambda param sẽ làm luôn object, gọi method không có param
Function<String, Integer> getLength = String::length;
Đấy, đó chính là lý do mình bị confuse (và maybe nhiều bạn cũng thế). Hi vọng Java sẽ bổ sung syntax mới rõ ràng hơn ở chỗ này.