Как использовать вложенные перечисления с стиранием типов Java

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.

Как это установить?


person Akh    schedule 29.09.2011    source источник
comment
Возможно, EnumSet, увиденное здесь?   -  person trashgod    schedule 29.09.2011


Ответы (2)


Я не думаю, что ты хочешь этого делать. Вы перебарщиваете с типами. Days.MONDAY имеет тип, отличный от Days.Weekdays.MONDAY и т. д. Нет особого смысла иметь их оба, если они несоизмеримы. Я думаю, у вас должен быть один набор констант перечисления для названий дней и EnumSet<Days> WeekendDays = EnumSet.of(Days.SATURDAY, Days.SUNDAY). Отсутствие имени дня в WeekendDays => это рабочий день.

person user207421    schedule 29.09.2011
comment
EnumSet делает то, что я искал. Спасибо ЭДЖП. - person Akh; 29.09.2011

Только исправляя ошибку, которая у вас есть. Исправьте объявление в файле main на

 InnerEnumTestClass<Days.WeekDays> testObj = 
                           new InnerEnumTestClass<Days.WeekDays>(Days.WeekDays.MONDAY);
person Shahzeb    schedule 29.09.2011
comment
Спасибо за синтаксис. Но я пытаюсь решить это концептуально. - person Akh; 29.09.2011