私は混乱していたコードの例を示します。マップで互換性のない型エラーが発生しました
制限付きの型のコレクションを作成し、同じ変数を他の無限型のコレクションである別の変数に割り当てると、コードが機能します。
List<? extends Number> numberList = new ArrayList<>();
List<?> anotherList = numberList; // OK
私は地図内で同じことをしようとした場合、私は、「互換性のない型」のエラーが表示されます。
Map<String, List<? extends Number>> numberMap = new HashMap<>();
Map<String, List<?>> anotherMap = numberMap; // ERROR
エラーは言う:
Map<String,List<? extends Number>> cannot be converted to Map<String,List<?>>
がMap<String,List<? extends Number>>
Map<String,List<?>>
のタイプではないですか?
は、ここで私はこれが動作しない理由を理解しようとしている便利https://ideone.com/AZgV9H
のためのクラス全体だとどのように私はそれを動作させるために、それを変更する必要があります。
ジェネリックは**共変ではありません。 'List'は 'List 'ではないので、 'Map >'は 'Map 'ではありません。 –
[リストはリストのサブクラスですか?なぜJavaのジェネリックは暗黙的に多相でないのですか?](http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p) –
Pshemo