一个简单通用的enum工厂类
来源:互联网 发布:阿里云分销平台 编辑:程序博客网 时间:2024/06/05 11:24
public interface Identifiable<K> { K getId();}public class EnumFactory {public static <T extends Enum<T> & Identifiable<K> , K > T getEnum(Class<T> type, K id) {for (T t : type.getEnumConstants()) { if(t.getId().equals(id)) { return t; }}return null;}public static <T extends Enum<T> & Identifiable<K> , K > T get(Class<T> type, K id) {EnumSet<T> set = EnumSet.allOf(type);if(set == null || set.size() <= 0){ return null;}for(T t: set){ if(t.getId().equals(id)){ return t; }}return null;}}public enum MonthEnum implements Identifiable<Integer>{ January(1), February(2), March(3), April(4), May(5), June(6); int value; private MonthEnum(int value){ this.value = value; } @Override public Integer getId() { return this.value; }}public enum WeekEnum implements Identifiable<String>{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday; @Override public String getId() { return name(); }}public class Client { public static void main(String[] args) { WeekEnum we = EnumFactory.get(WeekEnum.class, "Monday"); System.out.println(we); MonthEnum me = EnumFactory.getEnum(MonthEnum.class, 4); System.out.println(me); }}
今天忽然发现个非常恶心的问题,enum有一个的方法叫valueOf,参数是String,但是在找不到String对应的enum的时候,竟然会直接抛异常出来:
反编译enum的class文件可以看到会添加一个valueOf的方法:
public static RuntimeSettingKey valueOf(String s) { return (RuntimeSettingKey)Enum.valueOf(test/RuntimeSettingKey, s); }实际是调用父类的valueOf:
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) { T result = enumType.enumConstantDirectory().get(name); if (result != null) return result; if (name == null) throw new NullPointerException("Name is null"); throw new IllegalArgumentException( "No enum const " + enumType +"." + name); }我擦,为啥不能返回一个null呢?
这会导致调用valueOf的地方必须得加一个try-catch!另一种变通的做法是,自己来遍历,不用valueOf方法,二者都够恶心的,really ugly!
- 一个简单通用的enum工厂类
- enum枚举类的一个简单例子
- java enum 简单的写一个
- 一个简单通用的makefile
- 一个简单的工厂模式
- 一个简单的工厂模式
- 一个简单的工厂模式
- 工厂模式的enum实现
- 使用redisTemplete简单封装的一个通用操作类
- 一个通用工厂模式的优雅实现。。。= =
- C++中enum的使用的一个简单示例
- 一个简单的通用回调模板
- 一个简单的GridView分页通用程序
- 一个简单的通用Makefile模板
- 一个通用链表的简单实现
- 编写一个简单通用的makefile
- 一个简单的通用Makefile实现
- 一个简单通用的应用程序makefile
- 嵌入式软件组成及u-boot介绍
- 软基作业——使用链表实现多项式的存储以及加法
- 前端逻辑随笔
- Java学习总结之坦克大战项目(三)
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- 一个简单通用的enum工厂类
- C++中引用和指针的区别
- powerdesigner15 逆向工程
- 最优化方法在图像处理中的应用【4】
- [转]汉字与字符编码
- Java基础:多线程
- UTF-8与GB2312之间的互换 .
- 使用PHP采集远程图片
- 改变input file样式