0

次のコードがある場合:

public class DummyClass<T> {
    public List<T> getList() {
        return new ArrayList<T>();
    }
    public Set<List<T>> getListSet() {
        return new HashSet<List<T>>();
    }
}

そして、私はDummyClass<?> dummy

できます

List<?> list = dummy.getList();

エラーなし。

でも、

Set<List<?>> listSet = dummy.getListSet();

コンパイルエラーが発生します:

Type mismatch: cannot convert from Set<List<capture#1-of ?>> to Set<List<?>>

を割り当てdummy.getListSet()ます。

に代入できないdummy.getListSet()のはなぜSet<List<?>>ですか?

4

2 に答える 2

-1

まず、コンパイラが?を置き換えることを知っておくことが重要です。Objectクラスの演算子。したがって、これを書くとき:

DummyClass<?> dummy

クラス定義は次のようになります。

public class DummyClass<Object>

そして次のような方法:

public List<Object> getList() {
    return new ArrayList<Object>();
}
public Set<List<Object>> getListSet() {
    return new HashSet<List<Object>>();
}

あなたは書ける

List<?> list = new List<Object>();

だがしかし

Set<List<?>> set = new HashSet<List<Object>>();
于 2014-11-22T08:58:03.280 に答える