Enum 类型的 Java 泛型

标签 java generics collections wildcard enumeration

我正在尝试编写一个Java类,其中一部分需要将未知枚举的值映射到另一个类。我的类包含一个字段 private Map<? extends Enum, Unit> myMap并使用工厂方法 createMyClass 进行初始化:

public static MyClass <T extends Enum> myClass createMyClass(Class<T> x) {
    MyClass theClass = new MyClass() //constructor is private
    //...
    myMap = new HashMap<T, Unit>();
    for(T t : x.getEnumConstants())
        myMap.put(t, theClass.new Unit(t));
    //...
}

类(class)Unit是(据我所知,并且需要是) MyClass 的内部类。当我将其放入 NetBeans 中时,它会发出以下消息:

method put in interface java.util.Map<K,V> cannot be applied to given types
required: capture #4 of ? extends java.lang.Enum, MyClass.Unit
found: T, MyClass.Unit

我理解(或者至少我认为我理解)集合需要非常小心通配符的使用以保持类型安全,但我不知道如何 T extends Enum无法匹配? extends Enum .

最佳答案

尝试将方法声明更改为:

public static <T extends Enum<T>> MyClass createMyClass(Class<T> x) {
}

关于Enum 类型的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852226/

相关文章:

java - 如何将 ActiveMQ 生产者连接到 OpenMQ JMS 代理

java - 当我使用多个消费者时同步接收消息

java - 我如何在 JMockit 中模拟具有通用对象的方法?

java - 如何为泛型类型实现 equals?

java - 从 bean 类的 ArrayList<UserBean> 创建一个新的 ArrayList<String>

java - 如何使用 java FIle i/o 替换、删除或更新文件中的行

java - 为什么ArrayList中的set方法不更新modCount?

Java 使用正则表达式分割字符串

java - 如何在 ImageIcon 前面移动 JLabel?

TypeScript:更新联合类型中的公共(public)属性时出错