下面的代码编译没有错误......这一次我更希望它失败:/Java泛型非问题在编译时
Map <Character, Double> m = new HashMap <Character, Double>();
m.get(new String());
由于编译器知道在这个地图中使用的主要是字符类型,使用字符串键应该被标记为不正确。
我缺少什么?
下面的代码编译没有错误......这一次我更希望它失败:/Java泛型非问题在编译时
Map <Character, Double> m = new HashMap <Character, Double>();
m.get(new String());
由于编译器知道在这个地图中使用的主要是字符类型,使用字符串键应该被标记为不正确。
我缺少什么?
你不会错过任何东西。所有Map#get()
调用只需要Object
。
根据实施,你可能会看到一个(运行时)ClassCastException
当你传递一个String
到Map<Character, Double>#get()
。
如果您尝试运行此代码,则缺少(可选)运行时异常(ClassCastException
)。
该方法得到没有参数化与泛型参数只有结果是。
你也可以做
m.get(1L); //m.get(Object o);
的参数化方法把
m.put(new String(), 0.0); //Fail
//The method put(Character, Double) in the type Map<Character,Double> is not applicable for the arguments (String, double)
m.put(new Character('c'), 0.0); //Ok
Map.get()接受一个对象作为参数:java.util.Map#get
get
检索对象的参数是.equals()
。一个对象可能是.equals()
到另一个类的对象。
是的,这是正确的。字符串是一个对象:)我的IDE确实会发出警告 – 2010-11-03 14:08:21
我认为这样做的目的是保存遗留代码。纠正我,如果我错了。 – Jeremy 2010-11-03 14:09:52
完全正确(+1),尽管它是可怕的... – 2010-11-03 14:12:01