私は現在Java Genericsを読んでいますが、ワイルドカードに関してはちょっと立ち往生しています。Java Generics - クラス自身のサブクラスですか?
public void <T> copy(List<? super T> dest, List<? extends T> src) {
for(int i = 0; i < src.size(); i++) {
dest.set(i, src.get(i));
}
}
私は、このようにメソッドを呼び出すことが可能であると言われています:私はコレクションクラスからこのメソッドを与えられた
List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);
型パラメータとしてましたこのコンパイラは、コンパイラがtypeパラメータをIntegerとして選択すると言う。
これはどのように可能ですか?
それが整数であると見なされた場合、これは、メソッドの宣言であることを意味します -
List<? extends T>
List<Integer extends Integer>
に変換します。
これは間違いですか?またはジェネリックスに関するさまざまなルールがありますか?私は周りのグーグルと結果の大部分は、クラスは、それ自身のサブクラスにすることはできませんと言います。
ニゼットの答えは正しいのですが、あなたがポイントを逃していれば、それはすべていいですね。しかし、ジェネリックスは非常に混乱する可能性があります。この特定のケースについてより広範な説明が必要だと感じたら、私はそれを与えることを試みることができます。 – user1803551