为什么在泛型类上调用具有泛型返回的方法被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