2011-09-29 70 views
0
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.WeekDays和Days.Weekends。如何使用嵌套枚举与Java类型擦除

如何建立?

+0

也许'EnumSet',看到[这里](http://stackoverflow.com/questions/7296785/using-nested-enum-types-in-java/7297243#7297243)? – trashgod

回答

2

我不认为你想这样做。你过分的类型。 Days.MONDAY与Days.Weekdays.MONDAY等是不同的类型。如果它们不相称,那么它们都没有太多的意义。我想你应该有一组日期名称和EnumSet<Days> WeekendDays = EnumSet.of(Days.SATURDAY, Days.SUNDAY)枚举常量。 WeekendDays =没有一天的名字=>这是一个工作日。

+0

EnumSet完成我正在寻找的工作。感谢EJP。 – AKh

2

只修复您拥有的错误。更正您的主要声明

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

感谢您的语法。但我期待从概念上解决这个问题。 – AKh