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
何かを、私はリストになるだろう知っているので「?がリストを拡張する」ために、なぜワイルドカードを使用する –
これが関係していますネストされたワイルドカードの原則は、このウェブサイトをチェックしてください。http://bayou.io/draft/Capturing_Wildcards.html#Nested_Wildcards "キャプチャ変換はネストされたワイルドカードではなく、トップレベルのワイルドカードにのみ適用されます。 –