对枚举的TypeCasting对象不会给出枚举也不会出错

时间:2014-12-27 12:01:45

标签: java casting enums hashmap type-conversion

我有一个以下类型的枚举。

enum plant{
    rose("r"),lotus("l");

    String label;

    private plant(String label)
    {
        this.label = label;
    }
}

代码:

HashMap hashMap = new HashMap();
hashMap.put(plant.rose.label,4);
Object object = hashMap;
HashMap<plant, Integer> a = (HashMap<plant, Integer>) object;
System.out.println(a.keySet().contains(plant.rose));
System.out.println(a);

输出:

false
{r=4}

为什么它既没有给出任何

ClassCastException

HashMap<plant, Integer> a = (HashMap<plant, Integer>) object;

也不是

true a.keySet().contains(plant.rose)

2 个答案:

答案 0 :(得分:1)

泛型,一旦编译,就删除它们的类型参数,因此类型转换是将一个Hashmap对象转换为Hashmap,没有运行时错误。

至于比较,你把标签作为哈希键,但是将它与实际的枚举进行比较,所以它不会相等。

答案 1 :(得分:0)

你的演员实际上是将它投射到HashMap,因此没有错误。 它与枚举无关。泛型类型在编译时。之后你自己;) 也许这个例子会有所帮助

HashMap<String, Integer> hashMap = new HashMap();
hashMap.put("ali",4);
Object object = hashMap;
HashMap<Integer, Integer> a = (HashMap<Integer, Integer>) object;
a.put("ali", 123); // compile error
System.out.println(a.keySet().contains("ali")); //true
Set<String> integers = a.keySet(); // compile error
System.out.println(a.get("ali"));
System.out.println(a);