我試圖將項目切換到Java8,並遇到Eclipse Luna和javac類型推斷之間的奇怪差異。使用JDK 1.7.0_65 javac,這段代碼編譯得很好。 JDK 1.8.0_11抱怨toString(char [])和toString(Throwable)匹配「toString(getKey(code,null));」線。 Eclipse的月神4.4(I20140606-1215)與任一JDK愉快地進行編譯:類型推斷中的差異JDK8 javac/Eclipse Luna?
public class TypeInferenceTest {
public static String toString(Object obj) {
return "";
}
public static String toString(char[] ca) {
return "";
}
public static String toString(Throwable t) {
return "";
}
public static <U> U getKey(Object code, U defaultValue) {
return defaultValue;
}
public static void test() {
Object code = "test";
toString(getKey(code, null));
}
}
我認爲那些可能匹配的toString(對象)的唯一簽名。
當然,我可以簡單地添加強制轉換爲對象,但我不知道爲什麼javac的不能infere本身的類型(而日食一樣),爲什麼赫克的javac考慮的Throwable和的char []合適的配對,但不是對象。
這是Eclipse或javac中的錯誤嗎? (我的意思是隻有一個編譯器就在這裏,它要麼編譯或事實並非如此)
編輯:從javac的(JDK8)錯誤消息:
C:\XXXX\Workspace\XXXX\src>javac -cp . TypeInferenceTest.java
TypeInferenceTest.java:22: error: reference to toString is ambiguous
toString(getKey(code, null));
^
both method toString(char[]) in TypeInferenceTest and method toString(Throwable) in TypeInferenceTest match
1 error
哎呀,它說的盧娜在約。 – Durandal