List<Something>タイプ のオブジェクトのリストですSomething。
List<? extends Something>を拡張する特定のタイプのオブジェクトのリストですSomething。
したがって、は、List<Object>を拡張する任意のクラスのオブジェクトを持つことができますObject。ただしList<? extends Object>、拡張する特定のクラスのオブジェクトのリストとしてのみ初期化または割り当てできますObject
これはいつ役に立ちますか?Listofを受け取り、Objects各アイテムを出力するメソッドを書きたいとします。
void print(List<Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
さて、あなたが持っているとしましょうList<Integer>。printを受け取りList<Object>、List<Integer>に代入できないため、上記のメソッドに渡すことはできませんList<Object>。これを回避するために、次のように再定義printします。
void print2(List<? extends Object> list) {
for (Object obj: list) {
System.out.println(obj)
}
}
これで、 Object の任意のサブクラスの List を に渡すことができますprint2。等でprint2承ります。List<Integer>List<String>
逆に、はどの具体的なサブタイプが使用されているかわからないprint2ため、内のリストには何も追加できません。したがって、に何も追加する必要がないメソッドでのみ使用できます。print2Object? extends ...List