【问题标题】:Problem with constructor of a generic class using enumset使用枚举集的泛型类的构造函数问题
【发布时间】:2011-11-11 04:03:39
【问题描述】:

我想用java开发一个类。问题是构造函数不起作用

类是这样的:

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

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

我想用EnumSet.noneOf(E.class) 初始化地图,但构造函数给出了错误。

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

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

我也尝试将map = EnumSet.noneOf(E.class) 放入构造函数中,但都不起作用。

我认为是语法或方法的问题

你能帮帮我吗?

先谢谢了!

【问题讨论】:

  • 您遇到了什么错误?通常它带有有用的信息。

标签: java generics enums constructor enumset


【解决方案1】:

问题是您需要一个E 的类实例,而仅使用EE.class 是无法完成的。尝试提供一个Class&lt;E&gt; 作为构造函数参数,以便告诉类它被参数化为哪个枚举类。

这应该可行:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多