List<Something>
タイプ のオブジェクトのリストですSomething
。
List<? extends Something>
を拡張する特定のタイプのオブジェクトのリストですSomething
。
したがって、は、List<Object>
を拡張する任意のクラスのオブジェクトを持つことができますObject
。ただしList<? extends Object>
、拡張する特定のクラスのオブジェクトのリストとしてのみ初期化または割り当てできますObject
これはいつ役に立ちますか?List
ofを受け取り、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
ため、内のリストには何も追加できません。したがって、に何も追加する必要がないメソッドでのみ使用できます。print2
Object
? extends ...
List