我想在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)
到构造函数中,但它都不起作用。
我认为这是语法或方法
的问题 你可以帮助我吗?事先谢谢!
答案 0 :(得分:3)
问题是您需要一个E
的类实例,而只使用E
或E.class
无法完成。尝试并提供Class<E>
作为构造函数参数,以告诉类为其参数化的枚举类。
这应该有效:
public EnumSetPlus(Class<E> clazz){
map = EnumSet.noneOf(clazz);
}
问题是编译器不知道E实际上是什么类型(枚举它是什么),因此它无法在编译时解析类。您需要在运行时使用所建议的参数或通过子类化EnumSetPlus
以及可以使用反射确定的具体类型参数来获取该信息。由于在这个简单的情况下反射方法会过度,我建议尝试参数方法。