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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。