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. java编程中的断言工具类(org.springframework.util.Assert)
  2. 信息系统项目管理师:第1章:信息化与信息系统-重点汇总
  3. bs架构 mysql_基于BS架构OA办公系统的设计(PHP,MySQL)(三人组)(含录像)
  4. 我的Thinkpad T410最近老是出Fan error
  5. Hash索引和BTree索引
  6. 互联网晚报 | 12月11日 星期六 | 极兔正式入股百世快递;全球首颗云原生卫星诞生;紫光集团重组战略投资者确定...
  7. 【C语言】将输入的10个数排序
  8. virtualenv environment怎么选_2020年阿里云双11内容安全怎么选? - 云计算分享家
  9. 远东传动收购机器人_一张图为你总结最近5年在机器人领域收购案例
  10. HDU4506 小明系列故事——师兄帮帮忙【水题】
  11. 北理工java分析题_2020春北理工《Java技术与应用》在线作业-1(参考)
  12. 探索社群系统ThinkSNS品牌10周年!
  13. 线上靶机prompt.ml
  14. 一文读懂嵌入式FPGA,改变芯片设计方式岂是闹着玩的
  15. Excel散点图 如何用平滑线 连接 不连续的点
  16. android记事本的设计报告,安卓记事本开发设计报告.pdf
  17. openguass3.1.1升级5.0.0并测试tpch
  18. 锂离子电池热失控预警资料整理(一)
  19. IOS游戏看广告后物理静音不能控制App声音
  20. 差分升级 增量升级 单片机 STM32 IAP升级OTA升级,物联网车联网可用

热门文章

  1. opencv的shape函数
  2. 企业集成平台即服务的关键功能
  3. 电子科技大学 格拉斯哥学院 2017级欧阳韬
  4. android打开qsv视频,android手机如何播放qsv
  5. E: Package ‘curl‘ has no installation candidate(问题解决)
  6. 丁磊:那时候我们除了会写软件 什么也不会做[转]
  7. 华为手机教程 线刷 华为手机救砖 高维禁用UPDATE.APP 解包 刷机教学 教程
  8. MOS管被ESD击穿解决方案-KIA MOS管
  9. 优动漫PAINT中创建选区来绘制漫画的方法
  10. Windows Unix 文件格式之迷