2016-08-18 7 views
0

私はTaskVOをベースクラスとして持っています。 私は、最初のバージョンは、一般的な第二のバージョンが特化して使用している以下コンクリートマップを汎用型マップに割り当てる

TaskVOは私の2つのマップ宣言されている拡張TaggingTaskVo持っています。

Map<String, List<? extends TaskVO>> genericTaskVoMap = new HashMap<String, List<? extends TaskVO>>(); 
Map<String, List<TaggingTaskVo>> taskVoMap = new HashMap<String, List<TaggingTaskVo>>(); 

のはなぜgenericTaskVoMapにtaskVoMapを割り当てることはできませんか?

genericTaskVoMap = taskVoMap;  //Type mismatch: cannot convert from Map<String,List<TaggingTaskVo>> to Map<String,List<? extends TaskVO>> 

しかし、私がお互いにタイプリストを割り当てると、それは文句を言うことはありません。

List<? extends TaskVO> genericTaskVoList = new ArrayList<>(); 
List<TaskVO> taskVoList = new ArrayList<TaskVO>(); 
genericTaskVoList = taskVoList; //No compilation error 

答えて

2

あなたはassignementを実行するために別のワイルドカードが必要になります。少し奇妙

Map<String, ? extends List<? extends TaskVO>> genericTaskVoMap = new HashMap<String, ? extends List<? extends TaskVO>>(); 
+0

何かを、私はリストになるだろう知っているので「?がリストを拡張する」ために、なぜワイルドカードを使用する –

+1

これが関係していますネストされたワイルドカードの原則は、このウェブサイトをチェックしてください。http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards "キャプチャ変換はネストされたワイルドカードではなく、トップレベルのワイルドカードにのみ適用されます。 –

関連する問題