使用enumset的泛型类的构造函数的问题

时间:2011-09-06 09:20:05

标签: java generics enums constructor enumset

我想在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 个答案:

答案 0 :(得分:3)

问题是您需要一个E的类实例,而只使用EE.class无法完成。尝试并提供Class<E>作为构造函数参数,以告诉类为其参数化的枚举类。

这应该有效:

public EnumSetPlus(Class<E> clazz){
  map = EnumSet.noneOf(clazz);
}

问题是编译器不知道E实际上是什么类型(枚举它是什么),因此它无法在编译时解析类。您需要在运行时使用所建议的参数或通过子类化EnumSetPlus以及可以使用反射确定的具体类型参数来获取该信息。由于在这个简单的情况下反射方法会过度,我建议尝试参数方法。