Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么此转换无效?_Java - Fatal编程技术网

Java 为什么此转换无效?

Java 为什么此转换无效?,java,Java,我想使用具有各种列表作为值的映射: Map<String, List<Integer>> ml; Map<String, ?> ml2 = ml; // OK Map<String, List<?>> ml3 = ml; // Type mismatch Map-ml; 映射ml2=ml;//好啊 Map它无效,因为如果它有效,您也可以将非整数列表添加到ml 示例(无效): Map-ml; Map ml2=ml有效?这是因为使用通配符

我想使用具有各种列表作为值的映射:

Map<String, List<Integer>> ml;
Map<String, ?> ml2 = ml; // OK
Map<String, List<?>> ml3 = ml; // Type mismatch
Map-ml;
映射ml2=ml;//好啊

Map它无效,因为如果它有效,您也可以将非整数列表添加到
ml

示例(无效):

Map-ml;

Map ml2=ml有效?这是因为使用通配符告诉编译器不允许添加新元素,即
ml2.put(“strings”,Arrays.asList(“evil”,“string”)(编译器不进行类型检查,它只看到通配符,并且知道您不能调用该方法。

Map
将字符串映射到任何对象,整数列表可以与此通配符匹配。但是,整数列表与?(任何对象的列表)列表不匹配,因为整型列表只能接受整型对象。

A
MapI认为最好能解释为什么中间线转换在这种情况下会成功(并表明您无法通过该引用将任何内容放入其中,因此它是安全的)。此外,它是ml3.put,但是ml3.add;)@ArturBiesiadowski是的,修复了错误并添加了解释:)谢谢,我没有发现这个问题。注意,仍然可以向
映射添加元素,但唯一可以添加的值是
null
(如果映射支持null值)。
Map<String, List<Integer>> ml;
Map<String, List<?>> ml3 = ml; 

ml3.put("strings", Arrays.asList("evil","string"));

List<Integer> l = ml.get("strings"); //see how this is going to fail?