【问题标题】:How to use Nested Enums with Java Type Erasure如何在 Java 类型擦除中使用嵌套枚举
【发布时间】:2011-11-27 09:20:38
【问题描述】:
public enum Days {

    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;

    public enum WeekDays{
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
    }

    public enum WeekEnds{
        SATURDAY,
        SUNDAY;
    }
}



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

    public E enumtype;



    /**
     * @param enumtype
     */
    public InnerEnumTestClass(E enumtype) {
        super();
        this.enumtype = enumtype;
    }



    /**
     * @param args
     */
    public static void main(String[] args) {

        InnerEnumTestClass<Days> testObj = 
                           new InnerEnumTestClass<Days>(Days.WeekDays.MONDAY);

               // I get the following compiler error. 
               //The constructor InnerEnumTestClass<Days>(Days.WeekDays) is undefined

    }

}

如您所见,InnerEnumTestClass 类只接受类型,但我需要构造函数接受 Days、Days.WeekDays 和 Days.Weekends。

如何建立这个?

【问题讨论】:

  • 也许是EnumSet,见过here

标签: java enums constructor inner-classes type-erasure


【解决方案1】:

我认为你不想这样做。您过度使用了类型。 Days.MONDAY 与 Days.Weekdays.MONDAY 等属于不同的类型。如果它们不可比较,那么将它们两者兼有并没有多大意义。我认为您应该有一组用于日期名称的枚举常量和一个EnumSet&lt;Days&gt; WeekendDays = EnumSet.of(Days.SATURDAY, Days.SUNDAY)。 WeekendDays 中缺少日期名称 => 这是工作日。

【讨论】:

  • EnumSet 完成了我正在寻找的工作。谢谢 EJP。
【解决方案2】:

仅修复您遇到的错误。将 main 中的声明更正为

 InnerEnumTestClass<Days.WeekDays> testObj = 
                           new InnerEnumTestClass<Days.WeekDays>(Days.WeekDays.MONDAY);

【讨论】:

  • 感谢语法。但我希望从概念上解决这个问题。
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2016-03-31
相关资源
最近更新 更多