我有以下通用类:
import java.util.ArrayList;
import java.util.List;
public class GenericRaw<T> {
public List<String> get() {
return new ArrayList<>();
}
}
让我们考虑一下它的使用情况:
public class Usage {
public void doSomething() {
GenericRaw base = new GenericRaw();
for (String x : base.get()) { }
}
}
对于此代码,Idea 不会给出任何编译错误,但 Java 编译器本身会:
java:需要不兼容的类型:java.lang.String 找到:java.lang.Object
可在 JDK 1.6.0_33 和 JDK 1.7.0_17 上重现。
有人可以帮我解释这个问题吗?
我的调查结果。可以成功编译以下变体:
public void doSomething() { GenericRaw<?> base = new GenericRaw(); for (String x : base.get()) { } }
甚至:
public void doSomething() { GenericRaw base = new GenericRaw(); List<String> list = base.get(); for (String x : list) { } }