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?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage