2017-06-08 11 views
0

まったく同じか、異なる状況で使用されていますか?これはジェネリックの使用に違いがありますか?

public List<? extends Object> do(){ 
    return ... 
} 

VS

public List<Object> do(){ 
    return... 
} 
+0

前者は、Objectのいくつかのサブクラスのリストを返すことがあります。後者は、任意のクラスのオブジェクトのリストを返します。 ["List <?extends MyType>"](https://stackoverflow.com/questions/918026/list-extends-mytype)も参照してください。 –

+0

ジェネリックスは難しいです。 PECSの質問はあなたに正しい方向を指すはずです。 –

答えて

2

これらは同じではありません。

List<? extends Object>は、どのタイプのリストでもよい。

リストに実際にどのようなタイプが含まれているのかわからないので、何も入れることはできません。

+0

すべてが暗黙的にObjectのサブクラスなので、なぜ同じではないのですか?どちらの場合でも、do()は「すべて」のリストを返すことができます。そうじゃない? – user697911

+0

@ user697911両方とも 'do()。add(new Object())'で試してください。 – Radiodef

+0

No. 'List <? extends Object>は、リストがどのような型を持つべきかを知っていないことを意味します。それがどんな型であっても 'Object'を拡張します。実際には 'List 'であるかもしれないので、 'Dog'を置くことはできません。 – SLaks

関連する問題