Как использовать Вложенные Enums с Стиранием Типа Java - PullRequest
0 голосов
/ 29 сентября 2011
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.

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

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

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

2 голосов
/ 29 сентября 2011

Только исправление ошибки, которая у вас есть.Внесите поправку в ваше основное значение в

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