java 自定义可继承枚举Enum的案例

 更新时间:2021年02月24日 09:38:59   作者:eulers  
这篇文章主要介绍了java 自定义可继承枚举Enum的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一、定义enum抽象类

public class AbstractEnum { 
 private static final Map<String, AbstractEnum> nameEnumMap = new ConcurrentHashMap<>(); 
 @Getter
 protected String name; 
 protected AbstractEnum () {
 }
 
 protected AbstractEnum(String name) {
  this.name = name;
  if (!nameEnumMap.containsKey(name)) {
   nameEnumMap.put(name, this);
  }
 }
 
 public boolean equals(AbstractEnum abstractEnum) {
  return this.name == null || abstractEnum == null ? false : this.name.equals(abstractEnum.getName());
 }
 
 public String toString() {
  return this.name;
 }
 
 public static AbstractEnum valueOf(String name) {
  if (name == null)
   throw new NullPointerException("Name is null");
 
  AbstractEnum result = nameEnumMap.get(name);
  if (result != null) {
   return result;
  }
 
  throw new IllegalArgumentException(
    "No enum constant exists, name is." + name);
 }
 
 public static void init() {
 }
 
}

二、实际继承enum,与enum使用方法一致

public class TypeEnum extends AbstractEnum { 
 private static final Map<String, TypeEnum> nameEnumMap = new ConcurrentHashMap<>(); 
 protected TypeEnum(String name) {
 super(name);
 if (!nameEnumMap.containsKey(name)) {
 nameEnumMap.put(name, this);
 }
 }
 
 public static TypeEnum valueOf(String name) {
 if (name == null)
 throw new NullPointerException("Name is null");
 
 TypeEnum result = nameEnumMap.get(name);
 if (result != null) {
 return result;
 }
 
 throw new IllegalArgumentException(
 "No enum constant exists, name is." + name);
 }
 
 public static final TypeEnum TYPE_ONE = new TypeEnum("TYPE_ONE");
}

三、可继续继承枚举,进行枚举分类。

补充:Java中自定义枚举(Enum)项的值,可设置为指定的值

一、代码

package base.lang;
/**
 * ClassName: StateEnum 
 * @Description: TODO
 * @author fuming
 * @date 2016年11月27日
 */
public enum StateEnum
{
//添加枚举的指定常量
online(10),
offline(20);
//必须增加一个构造函数,变量,得到该变量的值
private int mState=0;
private StateEnum(int value)
{
mState=value;
}
/**
* @return 枚举变量实际返回值
*/
 public int getState()
 {
 return mState;
 } 
}

二、示例

 //enum
 StateEnum orderState=StateEnum.offline;
 //orderState=StateEnum.online;
 System.out.println("state="+ orderState.getState()); 

三、打印结果

state=20  //测试正常

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Mybatis自动创建表和更新表结构

    Mybatis自动创建表和更新表结构

    这篇文章主要介绍了Mybatis自动创建表和更新表结构的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • java存储以及java对象创建的流程(详解)

    java存储以及java对象创建的流程(详解)

    下面小编就为大家带来一篇java存储以及java对象创建的流程(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • springboot Mongodb的集成与使用实例详解

    springboot Mongodb的集成与使用实例详解

    这篇文章主要介绍了springboot Mongodb的集成与使用实例详解,需要的朋友可以参考下
    2018-04-04
  • Java网络编程之URL+URLconnection使用方法示例

    Java网络编程之URL+URLconnection使用方法示例

    这篇文章主要介绍了Java网络编程之URL+URLconnection使用方法示例,还是比较不错的,这里分享给大家,供需要的朋友参考。
    2017-11-11
  • IDEA安装阿里代码规范插件的步骤图文详解

    IDEA安装阿里代码规范插件的步骤图文详解

    这篇文章主要介绍了IDEA安装阿里代码规范插件的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Java集合之LinkedHashSet集合详解

    Java集合之LinkedHashSet集合详解

    这篇文章主要介绍了Java集合之LinkedHashSet集合详解,具有可预知迭代顺序的Set接口的哈希表和链表列表实现,此实现与HashSet不同的是,后者维护着一个运行于所有条目的双重链表列表,此链表定义了迭代顺序,需要的朋友可以参考下
    2023-09-09
  • 使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用SpringBoot根据配置注入接口的不同实现类(代码演示)

    使用springboot开发时经常用到@Autowired和@Resource进行依赖注入,但是当我们一个接口对应多个不同的实现类的时候如果不进行一下配置项目启动时就会报错,那么怎么根据不同的需求注入不同的类型呢,感兴趣的朋友一起看看吧
    2022-06-06
  • java开发中的误区和细节整理

    java开发中的误区和细节整理

    这篇文章给大家整理了关于JAVA开发中的细节以及经常进入的误区整理,希望我们整理的内容能够给大家提供到帮助。
    2018-04-04
  • Java输出数组的3种方法

    Java输出数组的3种方法

    这篇文章主要给大家介绍了关于Java输出数组的3种方法,对于初学者来说,数组的输入输出是一个麻烦的问题,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java 如何快速实现一个连接池

    Java 如何快速实现一个连接池

    有没有一个通用的库可以快速实现一个线程池呢?得益于 Java 完善的生态,前人们针对这种需要开发了一个通用库:Apache Commons Pool(下文简称 ACP)。本质上来说,ACP 库提供的是管理对象池的通用能力,当然也可以用来管理连接池了!
    2021-05-05

最新评论