2011-09-29 51 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