我有枚举:
public enum MyTypes {FOO, BAR}
我定义了一个具有泛型类型的类:
public MyClass<T extends MyTypes> {
private T theType;
...
}
以上代码编译成功。
接下来,我尝试创建一个 MyClass 实例,并将 Foo 类型作为泛型参数:
// Compilation error: Cannot resolve symbol FOO
MyClass<FOO> myInstanceWithFoo = new MyClass();
是因为Java不接受enum
类型作为泛型类型吗?如果是这样,是否有解决方法可以实现我想要实现的目标?
最佳答案
Is it because Java don't accept enum type as generic type?
任何枚举类型都是有效类型,并且可以参与形成类型参数(例如 MyClass<T extends MyTypes>
)和参数化类型(例如 MyClass<MyTypes> myInstance
)。
你做了什么
MyClass<FOO> myInstanceWithFoo = new MyClass();
自 FOO
以来从未正确过是 MyTypes
的实例(或对象) 。它不是一种类型,也不能被视为一种类型。
If so, is there a workaround to achieve what I want to achieve?
不需要MyClass
是通用的。它声明了 MyTypes
字段可以是 MyTypes.FOO
或MyTypes.BAR
(或者 null
,当然)。
class MyClass {
private MyTypes myType;
public MyClass(MyTypes myType) {
this.myType = myType;
}
}
每个MyTypes
实例知道如何创建 MyClass
来自自身。
enum MyTypes {
FOO, BAR;
public MyClass createMyClass() {
return new MyClass(this);
}
}
如何创建它们的示例是
class Example {
public static void main(String[] args) {
MyClass myInstanceWithFoo = MyTypes.FOO.createMyClass();
MyClass myInstanceWithBar = MyTypes.BAR.createMyClass();
}
}
关于java - 使用枚举作为我的类的通用类型但无法创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208761/