まったく同じか、異なる状況で使用されていますか?これはジェネリックの使用に違いがありますか?
public List<? extends Object> do(){
return ...
}
VS
public List<Object> do(){
return...
}
まったく同じか、異なる状況で使用されていますか?これはジェネリックの使用に違いがありますか?
public List<? extends Object> do(){
return ...
}
VS
public List<Object> do(){
return...
}
これらは同じではありません。
List<? extends Object>
は、どのタイプのリストでもよい。
リストに実際にどのようなタイプが含まれているのかわからないので、何も入れることはできません。
すべてが暗黙的にObjectのサブクラスなので、なぜ同じではないのですか?どちらの場合でも、do()は「すべて」のリストを返すことができます。そうじゃない? – user697911
@ user697911両方とも 'do()。add(new Object())'で試してください。 – Radiodef
No. 'List <? extends Object>は、リストがどのような型を持つべきかを知っていないことを意味します。それがどんな型であっても 'Object'を拡張します。実際には 'List
前者は、Objectのいくつかのサブクラスのリストを返すことがあります。後者は、任意のクラスのオブジェクトのリストを返します。 ["List <?extends MyType>"](https://stackoverflow.com/questions/918026/list-extends-mytype)も参照してください。 –
ジェネリックスは難しいです。 PECSの質問はあなたに正しい方向を指すはずです。 –