Java 自定义枚举类型
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 自定义枚举类型相关推荐
- 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)
写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题
本文作者: 伯乐在线 - HollisChuang .未经作者许可,禁止转载! 欢迎加入伯乐在线 专栏作者. 写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可 ...
- java之 ------ 枚举类型
枚举 一.枚举类型详细说明 简单的说,Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用"==&q ...
- java枚举类型有什么用_[转载] Java中枚举类型的使用 - enum
本文转载自博客 - Java枚举类型, 博主对原文内容及结构作了一定的修改. 1 枚举类的编译特性 从JDK 5开始, Java中多了一个关键字 -- enum: 可以将一组具有名称的值(包括Stri ...
- java(18) - 枚举类型和静态导入
一.枚举: 我们定义的枚举类都是继承于java.lang.Enum类,枚举中的每个成员默认都是 public static final. 枚举类型的使用是通过 枚举类名.值 的方式来调用. 对于枚举类 ...
- java的枚举类型是什么_什么是枚举(java枚举类型enum用法)
最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...
- java之枚举类型enum
一.什么是枚举类 1.在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例数目有限且固定的类,在 Java 中可以定义为枚举类. 2.枚举类是一种特殊的类,它和普通的类一 ...
- 【Java】枚举类型
一. 枚举是什么 隐约记得自己大一的时候在 C 语言的课程中学习过枚举 , 但是已经忘光光了 . 那么本文就在 Java 中再学一遍吧 . 枚举是一组常量集合,这些常量具有特定的标识符 . 在 Jav ...
最新文章
- java编程中的断言工具类(org.springframework.util.Assert)
- 信息系统项目管理师:第1章:信息化与信息系统-重点汇总
- bs架构 mysql_基于BS架构OA办公系统的设计(PHP,MySQL)(三人组)(含录像)
- 我的Thinkpad T410最近老是出Fan error
- Hash索引和BTree索引
- 互联网晚报 | 12月11日 星期六 | 极兔正式入股百世快递;全球首颗云原生卫星诞生;紫光集团重组战略投资者确定...
- 【C语言】将输入的10个数排序
- virtualenv environment怎么选_2020年阿里云双11内容安全怎么选? - 云计算分享家
- 远东传动收购机器人_一张图为你总结最近5年在机器人领域收购案例
- HDU4506 小明系列故事——师兄帮帮忙【水题】
- 北理工java分析题_2020春北理工《Java技术与应用》在线作业-1(参考)
- 探索社群系统ThinkSNS品牌10周年!
- 线上靶机prompt.ml
- 一文读懂嵌入式FPGA,改变芯片设计方式岂是闹着玩的
- Excel散点图 如何用平滑线 连接 不连续的点
- android记事本的设计报告,安卓记事本开发设计报告.pdf
- openguass3.1.1升级5.0.0并测试tpch
- 锂离子电池热失控预警资料整理(一)
- IOS游戏看广告后物理静音不能控制App声音
- 差分升级 增量升级 单片机 STM32 IAP升级OTA升级,物联网车联网可用
热门文章
- opencv的shape函数
- 企业集成平台即服务的关键功能
- 电子科技大学 格拉斯哥学院 2017级欧阳韬
- android打开qsv视频,android手机如何播放qsv
- E: Package ‘curl‘ has no installation candidate(问题解决)
- 丁磊:那时候我们除了会写软件 什么也不会做[转]
- 华为手机教程 线刷 华为手机救砖 高维禁用UPDATE.APP 解包 刷机教学 教程
- MOS管被ESD击穿解决方案-KIA MOS管
- 优动漫PAINT中创建选区来绘制漫画的方法
- Windows Unix 文件格式之迷