次の汎用クラスがあります。
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) { } }