2016-03-23 15 views
0

このコードはコンパイルできなかった理由私は思ったんだけど:私たちはそれですべてを保存することができますのでなぜオブジェクトのリストを取得できないのですか?

private static List<? super String> x() { 
     return null; 
} 


List<Object> l = x(); 

リストタイプのオブジェクトです。誰が説明できますか?

+1

PECS(プロデューサーエクステンションとコンシューマースーパー)についての情報 – Andrew

+0

'List <?スーパーストリング>は 'List 'にすることができますが、 'List list = new ArrayList ()'と書くことはできません。 –

答えて

2
List<Object> != List<? super String> 

すべてを保存することができます。

l.add("a"); 
l.add(1); 
l.add(new Object()); 

しかし、彼らは同じものではありませんので、あなたはList<Object>List<? super String>を割り当てることはできません。

BigDecimalList<Object>に追加できますが、List<? super String>にはBigDecimalを追加できません。