我想使用带有各种列表的地图作为值:
Map<String, List<Integer>> ml;
Map<String, ?> ml2 = ml; // OK
Map<String, List<?>> ml3 = ml; // Type mismatch
Run Code Online (Sandbox Code Playgroud)
为什么最后一行无效?
它无效,因为如果它有效,你也可以添加非整数列表ml.
示例(无效):
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?
Run Code Online (Sandbox Code Playgroud)
为什么Map<String, ?> ml2 = ml;有效?这是因为使用通配符告诉编译器不允许添加新元素,即ml2.put("strings", Arrays.asList("evil","string"));不允许(编译器不进行类型检查,它只是看到通配符并且知道你不能调用该方法.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |