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