Java では、型は宣言どおりに正確に一致する必要があります。それが与えられる
insertMongoDocument(String testName, Map<String, Object> input)
あなたはそれを呼び出すことはできません
Map<String, List<?>> map;
insertMongoDocument("foo", map);
Map<String, List<?>>
のインスタンスであるように見えますがMap<String, Object>
、そうではありません。
これは、基本的な継承に従っていないように見えるジェネリックの別のケースです。つまり、のインスタンスでList<SubClass>
はありませんList<SuperClass>
。
それが本当なら、次のバグが発生します。
List<Integer> listI = new ArrayList<Integer>();
List<Number> listN = listI; // compile error, but let's assume OK
listN.add(1.2); // Adding a Double (which is a Number) to a list of Integer - oops!
Integer i = listI.get(0); // BOOM... ClassCastException!
この線
List<Number> listN = listI;
明らかな理由で許可されていません.これは基本的にあなたが見ているものです.クラスのようにジェネリック型をキャストすることはできません.