java - 将对象类型转换为枚举不会给出枚举或错误

标签 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)

最佳答案

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

至于比较,您将标签作为哈希键,但将其与实际枚举进行比较,因此它不会相等。

关于java - 将对象类型转换为枚举不会给出枚举或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667025/

相关文章:

java - Java中如何强制关闭窗口?

c++ - gcc 的 -Wconversion 是否与使用比 int 短的整数类型的复合赋值(+= 等)不兼容?

java - 关于枚举的问题

java - java中的枚举类型是枚举实例 "enclosed"吗?

java - 多个监视器和 Java 小程序

java - 可重用的 Java StringReader

php - 谁能解释为什么 strtotime ('cast' ) 返回一个值?

c++ - 在 Android 下删除 C++ 代码中的 C 样式转换

c - 这段C代码中的 "Ranks"和 "Order"有什么区别?

java - 如何将我的二维 boolean 数组作为一个整体引用?