Diferenças na inferência de tipo JDK8 javac / Eclipse Luna?
Estou tentando mudar um projeto para Java8 e encontrar diferenças estranhas entre o Eclipse Luna e a inferência de tipo de javac. Com o JDK 1.7.0_65 javac, esse código compila perfeitamente. O JDK 1.8.0_11 reclama que toString (char []) e toString (Throwable) correspondem à "toString (getKey (código, nulo));" linha. O Eclipse Luna 4.4 (I20140606-1215) o compila alegremente com o JDK:
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));
}
}
Eu acho que a única assinatura que poderia corresponder é toString (Object).
Claro que eu poderia simplesmente adicionar um elenco ao Object, mas me perguntoporque O javac não pode inferir o tipo por si só (enquanto o eclipse o faz), e por que o heck javac considera Throwable e char [] correspondências adequadas, mas não Object.
Isso é um bug no Eclipse ou no javac? (Quero dizer, apenas um compilador pode estar aqui, seja ele compilado ou não)
Editar: Mensagem de erro do 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