我有以下的通用類:與列表<String>原始類型提供了編譯錯誤
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()) { }
}
}
對於這個代碼理念不給任何編譯錯誤,但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) { } }
我同意這是重複的[http://stackoverflow.com/questions/11007723/combining-raw-types-and-generic-methods](http://stackoverflow.com/questions/11007723/combining -raw-types-and-generic-methods)就在不同的條件下。 –