<分区>
我有以下代码:
public class Main {
public static void main(String[] args) {
Generic generic = new Generic<Integer>(5);
List<String> stringList = generic.getStringList(); // this line is where the compiler complains
}
}
public class Generic<T> {
private T member;
public Generic(T member) {
this.member = member;
}
public T getMember() {
return member;
}
public List<String> getStringList() {
return new ArrayList<String>();
}
}
注意类Generic
使用泛型类型参数声明,但变量 generic
在方法中 main
是删除类型,我。 e.没有类型参数。我不明白的是为什么编译器会提示分配了 List<String>
的行:
Warning:(6, 56) java: unchecked conversion
required: java.util.List<java.lang.String>
found: java.util.List
该方法明确返回 List<String>
,独立于类的通用参数。这就是变量 stringList
期望。似乎没有在类级别上对变量 generic
使用通用参数关闭所有泛型处理,而不仅仅是根据类的类型参数。
如果重要的话,我正在使用标准的 Oracle Java 1.7.0_55 编译器。
我不是在问如何摆脱警告。我知道我应该将变量类型声明为 Generic<Integer>
, 或者可以使用 @SuppressWarnings("unchecked")
.我的问题如下:
是否记录了此行为?
这种奇怪行为的原因是什么?