使用enumset的泛型类构造函数的java问题
我想用java开发一个类。问题是构造函数不起作用
课程内容如下:
public class EnumSetPlus<E extends Enum<E>> {
//Map
private EnumSet<E> map;
//Constructor
public EnumSetPlus(){
}
我想用EnumSet.noneOf(E.class)
对映射进行初始化,但构造函数给出了一个错误
构造函数错了吗?。我可以在没有构造函数的情况下初始化变量映射吗
我已经在变量上下文中尝试了public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E)
,但它不起作用
我也尝试过map = EnumSet.noneOf(E.class)
进入构造函数,但都不起作用
我认为这是语法或方法的问题
你能帮我吗
事先谢谢
# 1 楼答案
问题是您需要一个
E
的类实例,而仅仅使用E
或E.class
是无法实现的。尝试提供一个Class<E>
作为构造函数参数,以便告诉类它是为哪个枚举类参数化的这应该起作用:
问题是编译器不知道E实际上是什么类型(它是哪个枚举),因此无法在编译时解析该类。您需要在运行时使用建议的参数或通过子类化
EnumSetPlus
以及一个具体类型的参数来提供这些信息,然后可以使用反射来确定该参数。因为在这种简单的情况下,反射方法会有点过头,所以我建议尝试使用参数方法