1、定义枚举

public abstract class Enum {private final String m_name;private final String m_title;private static final Map<Class<? extends Enum>, List<Enum>> ENUMS_MAP = new HashMap<>();protected Enum(String name, String title) {Objects.requireNonNull(name);this.m_name = name;this.m_title = title;// name 唯一性验证if (valueOf(name) != null) {throw new IllegalArgumentException("enum of " + name + " has exists in " + getClass());}ENUMS_MAP.computeIfAbsent(getClass(), e -> new ArrayList<>()).add(this);}/*** 获取自定义枚举类型的 name** @return 枚举 name*/public String name() {return this.m_name;}/*** 获取自定义枚举类型的 title** @return 枚举 title*/public String title() {return this.m_title;}/*** 获取当前枚举类型的所有 names** @return names*/public String[] names() {return names(getClass());}public static String[] names(Class<? extends Enum> type) {if (!ENUMS_MAP.containsKey(type)) {return new String[0];}return ENUMS_MAP.get(type).stream().map(Enum::name).toArray(String[]::new);}/*** 根据枚举 name 获取当前类型枚举对象** @param name 枚举 name* @return name 对应的枚举对象*/public Enum valueOf(String name) {return valueOf(getClass(), name);}/*** 根据枚举 name 获取 type 枚举对象** @param type 枚举类型* @param name 枚举 name* @return 对应的枚举对象*/public static Enum valueOf(Class<? extends Enum> type, String name) {if (!ENUMS_MAP.containsKey(type)) {return null;}return ENUMS_MAP.get(type).stream().filter(e -> e.m_name.equalsIgnoreCase(name)).findFirst().orElse(null);}@Overridepublic int hashCode() {return Objects.hash(m_name, m_title);}@Overridepublic boolean equals(Object obj) {if (obj == null) {return false;}if (obj.getClass() != getClass()) {return false;}return Objects.equals(m_name, ((Enum) obj).m_name);}@Overridepublic String toString() {return "Enum{" +"name='" + m_name + '\'' +", title='" + m_title + '\'' +'}';}
}

2、实现枚举

public class Season extends Enum {public static final Season SPRING = new Season("SPRING", "春季");public static final Season SUMMER = new Season("SUMMER", "夏季");public static final Season AUTUMN = new Season("AUTUMN", "秋季");public static final Season WINTER = new Season("WINTER", "冬季");protected Season(String name, String title) {super(name, title);}public static void main(String[] args) {Enum winter = Enum.valueOf(Season.class, "WINTER");System.out.println(winter == WINTER);String[] names = Enum.names(Season.class);System.out.println(names.length);}
}

Java 自定义枚举类型相关推荐

  1. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  2. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  3. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题

    本文作者: 伯乐在线 - HollisChuang .未经作者许可,禁止转载! 欢迎加入伯乐在线 专栏作者. 写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可 ...

  4. java之 ------ 枚举类型

    枚举 一.枚举类型详细说明 简单的说,Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用"==&q ...

  5. java枚举类型有什么用_[转载] Java中枚举类型的使用 - enum

    本文转载自博客 - Java枚举类型, 博主对原文内容及结构作了一定的修改. 1 枚举类的编译特性 从JDK 5开始, Java中多了一个关键字 -- enum: 可以将一组具有名称的值(包括Stri ...

  6. java(18) - 枚举类型和静态导入

    一.枚举: 我们定义的枚举类都是继承于java.lang.Enum类,枚举中的每个成员默认都是 public static final. 枚举类型的使用是通过 枚举类名.值 的方式来调用. 对于枚举类 ...

  7. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

  8. java之枚举类型enum

    一.什么是枚举类 1.在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例数目有限且固定的类,在 Java 中可以定义为枚举类. 2.枚举类是一种特殊的类,它和普通的类一 ...

  9. 【Java】枚举类型

    一. 枚举是什么 隐约记得自己大一的时候在 C 语言的课程中学习过枚举 , 但是已经忘光光了 . 那么本文就在 Java 中再学一遍吧 . 枚举是一组常量集合,这些常量具有特定的标识符 . 在 Jav ...

最新文章

  1. Spring.Net学习笔记(2)-依赖注入
  2. 云服务器 文件服务,云服务 做文件服务器
  3. mybatis审查要点
  4. system.js 替换 require.js
  5. 修改MAC地址的方法(未测试)
  6. AutoRobot微信/QQ定时自动发
  7. MT7621AT,MT7620A,WIFI6,MT7975D+MT7915DAN
  8. UE4添加人物动画之前后左右移动
  9. 向Spring大佬低头--大量源码流出解析
  10. Element 根据勾选导出Excel表格数据
  11. Word文档中最后一页底端的表格制作
  12. 若依框架修改器(包名修改器) 修改不全问题
  13. Docker MSSQL 添加读取 MDF 文件
  14. Windows XP Service Pack 3 修复程序列表
  15. 指针学习中二维数组解引用问题
  16. 【基础算法】试除法求约数(Acwing869题)
  17. 二维码制作(QRCode)
  18. AirBnb 创业三剑客
  19. .net 部署到服务端IIS,Process调用exe程序无法运行问题解决
  20. PDA手持终端扫描条码开单打印一体 结合后台电脑系统 数据同步交互解决方案...

热门文章

  1. 1_28_python基础学习_0427
  2. 苏格拉底的苹果_喻道故事18:一只没有香气的苹果
  3. OK1028A-C适配RTL8822CE wifi模块
  4. 醍醐灌顶-读书不是读的越多越快越好!
  5. 实际项目-移动端调用摄像头获取照片加水印
  6. 从和颐酒店事件来看地方安防标准的作用
  7. 职称认定和职称评审的区别是什么
  8. Qt界面中的status bar
  9. QT 文件的读写操作在TextEdit中输出
  10. 查找CAD图纸中的坐标