Java Generics在编译时没有问题

时间:2010-11-03 14:01:39

标签: java generics

下面的代码编译没有错误...一次我会更喜欢它失败:/

    Map <Character, Double> m = new HashMap <Character, Double>();
    m.get(new String());

由于编译器知道此映射中使用的键是Character类型,因此使用String键应标记为不正确。

我缺少什么?

5 个答案:

答案 0 :(得分:11)

你没有遗漏任何东西。所有Map#get()来电只需Object

根据实现,当您将ClassCastException传递给String时,您可能会看到(运行时)Map<Character, Double>#get()


Here's why Map#get() isn't fully generic

答案 1 :(得分:1)

如果您尝试运行此代码,则缺少(可选)运行时异常(ClassCastException)。

答案 2 :(得分:1)

方法get没有使用泛型参数进行参数化,结果只是。

您也可以

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

答案 3 :(得分:1)

Map.get()以Object为参数:java.util.Map#get

答案 4 :(得分:0)

get检索参数为.equals()的对象。对象可能是.equals()到另一个类的对象。