900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java 自定义枚举类型

Java 自定义枚举类型

时间:2019-07-11 02:56:12

相关推荐

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());}puteIfAbsent(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);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。