在Java中,以下代碼在兩個查詢上都返回false。爲什麼?方法引用是單身嗎?它肯定會使附加和分離聽衆變得更簡單。因爲您需要爲任何需要進行等效性檢查的方法引用保持常量,所以不能只在每個必需位置使用方法引用運算符。爲什麼不是方法引用singleton?
public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
public void doStuff() {
}
public static void main(String[] args) {
Main main = new Main();
Runnable thing1 = main::doStuff;
Runnable thing2 = main::doStuff;
System.out.println(thing1 == thing2); // false
System.out.println(thing1.equals(thing2)); // false
}
}
那麼爲什麼不重寫.equals()引用的方法?所有需要的將是每個持有對'main'和'Main.class.getMethod(「doStuff」)'的引用(感謝提示@CostiCiudatu) – Dimitriye98
@ Dimitriye98:這絕對是一種可能性 - 但是你會需要精確定義語義。例如,對兩個截然不同但等於對象的實例方法的引用是否相等?也許......但是任何時候你依賴於這樣的equals都會依賴函數的實現細節 - 如果某人手動實現了'Runnable'會怎麼樣呢? –
看起來我的編輯是忍者,因爲我不小心按下了回車鍵而不是shift-enter並提前提交了評論:P – Dimitriye98