我有一个以下类型的枚举。
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)
?
答案 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);