java 自定义可继承枚举Enum的案例
一、定义enum抽象类
publicclassAbstractEnum{ privatestaticfinalMapnameEnumMap=newConcurrentHashMap<>(); @Getter protectedStringname; protectedAbstractEnum(){ } protectedAbstractEnum(Stringname){ this.name=name; if(!nameEnumMap.containsKey(name)){ nameEnumMap.put(name,this); } } publicbooleanequals(AbstractEnumabstractEnum){ returnthis.name==null||abstractEnum==null?false:this.name.equals(abstractEnum.getName()); } publicStringtoString(){ returnthis.name; } publicstaticAbstractEnumvalueOf(Stringname){ if(name==null) thrownewNullPointerException("Nameisnull"); AbstractEnumresult=nameEnumMap.get(name); if(result!=null){ returnresult; } thrownewIllegalArgumentException( "Noenumconstantexists,nameis."+name); } publicstaticvoidinit(){ } }
二、实际继承enum,与enum使用方法一致
publicclassTypeEnumextendsAbstractEnum{ privatestaticfinalMapnameEnumMap=newConcurrentHashMap<>(); protectedTypeEnum(Stringname){ super(name); if(!nameEnumMap.containsKey(name)){ nameEnumMap.put(name,this); } } publicstaticTypeEnumvalueOf(Stringname){ if(name==null) thrownewNullPointerException("Nameisnull"); TypeEnumresult=nameEnumMap.get(name); if(result!=null){ returnresult; } thrownewIllegalArgumentException( "Noenumconstantexists,nameis."+name); } publicstaticfinalTypeEnumTYPE_ONE=newTypeEnum("TYPE_ONE"); }
三、可继续继承枚举,进行枚举分类。
补充:Java中自定义枚举(Enum)项的值,可设置为指定的值
一、代码
packagebase.lang; /** *ClassName:StateEnum *@Description:TODO *@authorfuming *@date2016年11月27日 */ publicenumStateEnum { //添加枚举的指定常量 online(10), offline(20); //必须增加一个构造函数,变量,得到该变量的值 privateintmState=0; privateStateEnum(intvalue) { mState=value; } /** *@return枚举变量实际返回值 */ publicintgetState() { returnmState; } }
二、示例
//enum StateEnumorderState=StateEnum.offline; //orderState=StateEnum.online; System.out.println("state="+orderState.getState());
三、打印结果
state=20//测试正常
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。