在java中,这个赋值有什么问题:
MapmObj = new HashMap ();
我明白了:
error: incompatible types: HashMapcannot be converted to Map
从String[]
是Object
,这应该工作.如果我投射到这样的非参数Map
:Map
它是有效的,但当然,我得到一个警告,它是脏的.
此外,我觉得我的第一个任务应该有效.
谢谢 !
PS:我不能简单地改变new HashMap
,new HashMap
因为在现实中,我调用一个返回a的方法,Map
当然,我不能改变这个方法.再次感谢你.
错误是因为泛型不支持子类型.Number a = new Integer(5)
是有效的案例.但是一旦你把泛型它给出了编译错误ArrayList
是不允许的.看看这个链接是否有助于https://dzone.com/articles/5-things-you-should-know-about-java-generics了解一些关于泛型的指南.
让我们看看如果你写的东西可能会发生什么:
HashMapfoo = new HashMap (); Map bar = foo; bar.put("key",new Object()); String[] baz = foo.get("key"); // <-- ClassCastException
看到问题?一系列正常,平凡的操作将导致ClassCastException
您可能无法发出一个正常,平凡的操作.
编辑:总结一下,Map
不是超类型Map
,Map
或者Map
,因此分配不起作用,因为类型不兼容.这就是通配符的来源; 看到这个答案也是这个