¿Por qué javac considera inseguro el método de llamada con retorno genérico en una clase genérica?
Considere el siguiente código:
public class Main {
public static class NormalClass {
public Class<Integer> method() {
return Integer.class;
}
}
public static class GenericClass<T> {
public Class<Integer> method() {
return Integer.class;
}
}
public static void main(String... args) {
NormalClass safeInstance = new NormalClass();
Class<Integer> safeValue = safeInstance.method();
GenericClass unsafeInstance = new GenericClass();
Class<Integer> unsafeValue = unsafeInstance.method();
}
}
Si lo compilo con:
$ javac -Xlint:unchecked Main.java
Vuelve:
Main.java:16: warning: [unchecked] unchecked conversion
Class<Integer> unsafeValue = unsafeInstance.method();
^
required: Class<Integer>
found: Class
1 warning
Tenga en cuenta que solo el método genérico se considera inseguro, incluso si no se hace referencia a ningún tipo genérico en el tipo de retorno.
Esto es unjavac
¿error? ¿O hay una razón más profunda para esto que no estoy teniendo en cuenta?