我正在測試使用方法引用的規則,但是我寫的代碼不能編譯。編譯器不斷告訴我,我無法從靜態上下文中引用非靜態方法。但是,在Java文檔中明確寫道,可以使用「::」來「引用特定類型任意對象的實例方法」。任何人都可以指出我的代碼有什麼問題嗎?謝謝!在運行時用Java確定的實例的方法引用
package Test;
import java.util.function.BiPredicate;
class Evaluation {
public boolean evaluate(int a, int b) {
if (a-b ==5){
return true ;
}
return false;
}
public void methodTest() {
BiPredicate<Integer, Integer> biPredicate = Evaluation::evaluate;
System.out.println(biPredicate.test(6,1));
}
}
編輯:閱讀的答案後,我在想,如果它的情況是由類名引用的實例方法只適用於一些功能接口,而不是在其他的呢?例如,
BiPredicate <String, Integer> biPredicate = String::startsWith;
不能編譯,而:
Predicate <String> predicate = String::isEmpty;
編譯。 如果是這樣的話,有沒有一個頁面/教程/任何人都可以引用我的解釋哪些功能接口兼容,哪些不是?
另請參見[這裏](http://stackoverflow.com/questions/25512532/lambda-parameters) – Holger
'String :: startsWith'需要3個參數; 1.要調用的String實例,2. String參數前綴,以及int參數toffset。但是'Bipredicate'只能佔2個。 'String :: isEmpty',需要1個參數,要調用的實例,所以'謂詞'_will_工作。 –
@JornVernee你是完全正確的。但是,爲什麼'Predicate謂詞= String :: isEmpty; 「工作?喜歡爲什麼我不需要傳遞一個新的'String()實例(因爲你的答案在我原來的問題可能表明)? –