繁体   English   中英

如何在Java类型擦除中使用嵌套枚举

[英]How to use Nested Enums with Java Type Erasure

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。

如何建立这个?

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

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

我不认为您要这样做。 您正在过度使用类型。 Days.MONDAY的类型与Days.Weekdays.MONDAY的类型不同,依此类推。 我认为您应该为日期名称设置一组枚举常量,并提供一个EnumSet<Days> WeekendDays = EnumSet.of(Days.SATURDAY, Days.SUNDAY) WeekendDays中没有日期名称=>它是一个工作日。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM