Warum wird die aufrufende Methode mit generischer Rückgabe für eine generische Klasse von javac als unsicher eingestuft?
Betrachten Sie den folgenden Code:
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();
}
}
Wenn ich es kompiliere mit:
$ javac -Xlint:unchecked Main.java
It gibt zurück:
Main.java:16: warning: [unchecked] unchecked conversion
Class<Integer> unsafeValue = unsafeInstance.method();
^
required: Class<Integer>
found: Class
1 warning
Bitte beachten Sie, dass nur die generische Methode als unsicher eingestuft wird, auch wenn für den Rückgabetyp kein generischer Typ angegeben ist.
Ist das einjavac
Bug? Oder gibt es einen tieferen Grund dafür, den ich nicht berücksichtige?