有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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) 个答案

  1. # 1 楼答案

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

    这应该起作用:

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

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