java8下 枚举 通用方法
2019-12-25 16:03:17来源:博客园 阅读 ()
java8下 枚举 通用方法
在项目中经常用到枚举作为数据字典值和描述的相互转化。
用法如下:
public enum CommunicationParamsCom { COM_1(1, "COM1"), COM_2(2, "485端口1"), COM_3(3, "485端口2"), COM_31(31, "载波"); private int value; private String key; CommunicationParamsCom(int value, String key) { this.value = value; this.key = key; } public int getValue() { return value; } public String getKey() { return key; } public static CommunicationParamsCom getEnmuByValue(int value) { for (CommunicationParamsCom item : values()) { if (value == item.getValue()) { return item; } } return null; } public static CommunicationParamsCom getEnmuByKey(String key) { if (StringUtil.isEmpty(key)) { return null; } for (CommunicationParamsCom item : values()) { if (key.equals(item.getKey())) { return item; } } return null; } }
当枚举类多了之后,会存在很多重复的值和描述相互转化的方法,类似getEnmuByValue和getEnmuByKey。
最近找到一种方法,利用接口、接口默认方法、泛型,实现通用的方法。同类型的枚举只需要实现该接口即可。
代码如下:
1 public interface ICommonEnum { 2 int getValue(); 3 4 String getKey(); 5 6 static <E extends Enum<E> & ICommonEnum> E getEnmu(Integer value, Class<E> clazz) { 7 Objects.requireNonNull(value); 8 EnumSet<E> all = EnumSet.allOf(clazz); 9 return all.stream().filter(e -> e.getValue() == value).findFirst().orElse(null); 10 } 11 12 static <E extends Enum<E> & ICommonEnum> E getEnmu(String key, Class<E> clazz) { 13 Objects.requireNonNull(key); 14 EnumSet<E> all = EnumSet.allOf(clazz); 15 return all.stream().filter(e -> e.getKey().equals(key)).findFirst().orElse(null); 16 } 17 }
具体用法:
1 public enum RtuProtocol implements ICommonEnum { 2 PTL_A(1, "A规约"), PTL_B(2, "B规约"); 3 4 private int value; 5 private String key; 6 7 RtuProtocol(int value, String key) { 8 this.value = value; 9 this.key = key; 10 } 11 12 public int getValue() { 13 return value; 14 } 15 16 public String getKey() { 17 return key; 18 } 19 }
转换时的调用举例:
RtuProtocol = ICommonEnum.getEnmu(1,RtuProtocol.class)
原文链接:https://www.cnblogs.com/legend_sun/p/12098981.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- java8 stream的分组功能,具体时候是真的好用 2020-06-10
- 秒懂系列,超详细Java枚举教程!!! 2020-06-08
- Spring Cloud Gateway 全局通用异常处理 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- Kotlin与java8的SAM转换对比 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash