Почему вызов метода с универсальным возвратом для универсального класса считается небезопасным для javac?

Рассмотрим следующий код:

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();
    }
}

Если я скомпилирую это с:

$ javac -Xlint:unchecked Main.java 

Возвращает:

Main.java:16: warning: [unchecked] unchecked conversion
        Class<Integer> unsafeValue = unsafeInstance.method();
                                                          ^
  required: Class<Integer>
  found:    Class
1 warning

Обратите внимание, что только обобщенный метод считается небезопасным, даже если в возвращаемом типе нет ссылки на универсальный тип.

Этоjavac ошибка? Или для этого есть более глубокая причина, которую я не принимаю во внимание?

Ответы на вопрос(3)

Ваш ответ на вопрос