下面是我的代碼片段的兩行:Comparator.comparing(...)拋出非靜態引用異常而採取的字符串::的compareTo
List<String> listDevs = Arrays.asList("alvin", "Alchemist", "brutus", "larsen", "jason", "Kevin");
listDevs.sort(Comparator.comparing(String::length)); //This works fine
listDevs.sort(String::compareToIgnoreCase); //This works fine
但(出expermient的),當我嘗試寫
listDevs.sort(Comparator.comparing(String::compareToIgnoreCase));
編譯器會引發錯誤
不能使靜態參考非靜態方法 compareToIgn oreCase(字符串)從字符串類型
類似恰好下面的代碼
listDevs.sort(Comparator.comparing(String::compareTo));
我理解的錯誤,並且如果刪除Comparator.comparing它工作正常(如上所示)。
但我要說的是,這如何行工作?
listDevs.sort(Comparator.comparing(String :: length));
我相信我失去了一些東西。我已閱讀this線程。這是相同的情況?
我會說'String :: compareToIgnoreCase'只是不匹配'Comparator.comparing'預期的方法簽名。它期望'String - > Comparable',但是得到'(String,String) - > Integer'。但是不知道錯誤。也許Java試圖將不匹配的方法解釋爲靜態方法,以查看是否匹配...順便說一句,在Eclipse中,我得到了一個不同的,更明智的錯誤消息。 –