1

次の汎用クラスがあります。

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) {   }
}
4

1 に答える 1