Los compiladores se comportan de manera diferente con un parámetro nulo de un método genérico
El siguiente código se compila perfectamente con Eclipse, pero no se compila con javac:
public class HowBizarre {
public static <P extends Number, T extends P> void doIt(P value) {
}
public static void main(String[] args) {
doIt(null);
}
}
Simplifiqué el código, por lo que T no se usa en absoluto ahora. Aún así, no veo una razón para el error. Por alguna razón, javac decide que T significa Objeto, y luego se queja de que Objeto no se ajusta a los límites de T (lo cual es cierto):
HowBizarre.java:6: tipos incompatibles; argumento (s) de tipo inferido java.lang.Number, java.lang.Object no se ajusta a los límites de las variables de tipo P, T
encontró :<P,T>
vacío
requerido: nulo
doIt(null);
^
Tenga en cuenta que si reemplazo el parámetro nulo con un valor no nulo, se compila bien.
¿Cuál de los compiladores se comporta correctamente y por qué? ¿Es esto un error de uno de ellos?