Tôi đang đấu tranh để hiểu tại sao đoạn mã sau biên dịch:Tại sao phương pháp này tham chiếu biên dịch chuyển nhượng?
public class MethodRefs {
public static void main(String[] args) {
Function<MethodRefs, String> f;
f = MethodRefs::getValueStatic;
f = MethodRefs::getValue;
}
public static String getValueStatic(MethodRefs smt) {
return smt.getValue();
}
public String getValue() {
return "4";
}
}
tôi có thể thấy lý do tại sao việc chuyển nhượng đầu tiên là hợp lệ - getValueStatic
rõ ràng phù hợp với quy định Function
loại (nó chấp nhận một đối tượng MethodRefs
và trả về một String
), nhưng cái thứ hai cản trở tôi - phương pháp getValue
không chấp nhận đối số, vậy tại sao nó vẫn hợp lệ để gán nó cho f
?
Bản sao có thể có của [lambda với các phương thức không tĩnh trong Java 8] (http://stackoverflow.com/questions/25784337/lambda-with-non-static-methods-in-java-8) –
Ngoài ra [: : (dấu hai chấm) toán tử trong Java 8] (http://stackoverflow.com/questions/20001427/double-colon-operator-in-java-8/22245383#22245383) và [Sử dụng dấu hai chấm - sự khác biệt giữa tĩnh và tham chiếu phương pháp không tĩnh] (http://stackoverflow.com/questions/34982972/use-of-double-colons-difference-between-static-and-non-static-method-reference?noredirect=1&lq=1) –