Рассмотрим следующий код:
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? Или есть более глубокая причина для этого, я не принимаю во внимание?