Diferencias en la inferencia de tipos JDK8 javac / Eclipse Luna?
Estoy tratando de cambiar un proyecto a Java8 y encuentro diferencias extrañas entre Eclipse Luna y la inferencia de tipos de javac. Con JDK 1.7.0_65 javac este código se compila muy bien. JDK 1.8.0_11 se queja de que tanto toString (char []) como toString (Throwable) coinciden con "toString (getKey (code, null));" línea. Eclipse Luna 4.4 (I20140606-1215) lo compila felizmente con 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));
}
}
Creo que la única firma que podría coincidir es toString (Object).
Por supuesto, podría simplemente agregar un elenco a Object, pero me preguntopor qué javac no puede inferir el tipo por sí mismo (mientras que eclipse lo hace), y por qué el javac diablos considera Throwable y char [] coincidencias adecuadas, pero no Object.
¿Es esto un error en Eclipse o javac? (Quiero decir que solo un compilador puede estar aquí, ya sea que compila o no)
Editar: Mensaje de error de 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