2011-09-06 52 views
0

我想在java中开发一个类。问题是,构造函数不工作使用enumset的泛型类的构造函数的问题

类是这样的:

public class EnumSetPlus<E extends Enum<E>> { 

//Map 
private EnumSet<E> map; 

//Constructor 
public EnumSetPlus(){ 

} 

我想inicializate与EnumSet.noneOf(E.class)地图,并在构造函数给出了一个错误。

构造函数是否错误?我可以在没有构造函数的情况下初始化变量映射吗?

我在变量上下文中尝试过public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E),但它不起作用。

我也试过map = EnumSet.noneOf(E.class)也进入构造函数,但它都不起作用。

我认为这是一个问题的语法或方法

你能帮助我吗?

事先感谢!

+1

你得到了什么错误?通常它带有一个有用的信息。 – Thilo

回答

3

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

这应该工作:

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

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

相关问题