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。
最近找到一种方法,利用接口、接口默认方法、泛型,实现通用的方法。同类型的枚举只需要实现该接口即可。
代码如下:
public interface ICommonEnum {
int getValue();
String getKey();
static <E extends Enum<E> & ICommonEnum> E getEnmu(Integer value, Class<E> clazz) {
Objects.requireNonNull(value);
EnumSet<E> all = EnumSet.allOf(clazz);
return all.stream().filter(e -> e.getValue() == value).findFirst().orElse(null);
}
static <E extends Enum<E> & ICommonEnum> E getEnmu(String key, Class<E> clazz) {
Objects.requireNonNull(key);
EnumSet<E> all = EnumSet.allOf(clazz);
return all.stream().filter(e -> e.getKey().equals(key)).findFirst().orElse(null);
}
}
具体用法:
public enum RtuProtocol implements ICommonEnum {
PTL_A(1, "A规约"), PTL_B(2, "B规约");
private int value;
private String key;
RtuProtocol(int value, String key) {
this.value = value;
this.key = key;
}
public int getValue() {
return value;
}
public String getKey() {
return key;
}
}
转换时的调用举例:
RtuProtocol protocol = ICommonEnum.getEnmu(1,RtuProtocol.class)
java8下 枚举 通用方法的更多相关文章
- Ubuntu 14.04下 Java通用安装方法
参考: 解决Floodlight1.2+Mininet问题及使用安装 Ubuntu下安装JDK1.7图文详解 Ubuntu 14.04下 Java通用安装方法 1.到oracle官网下下载对应jdk包 ...
- DataTable数据赋值给Model通用方法
注:该文属本人原创,今后项目中发现该方法存在BUG会实时更新,转载记得附上原文出处,方便大家获得最新代码. 相信大家在做项目中,经常会根据不同的表new各种不同的Model,当需要对Model进行实例 ...
- hibernate学习笔记4---HQL、通用方法的抽取实现
一.通用方法的抽取实现 由于hibernate中对增删改查的一切操作都是面向对象的,所以将增删改查抽取成通用方法,以满足不同的表的增删改查操作,简化jdbc代码. 具体例子如下: package cn ...
- 使用JsPlumb绘制拓扑图的通用方法
转自:http://www.it165.net/pro/html/201311/7616.html 使用JsPlumb绘制拓扑图的通用方法 一. 实现目标 绘制拓扑图, 实际上是个数据结构和算法的问题 ...
- [置顶] .NET下枚举类型的Save和Load分析
今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- java8新特性-默认方法
作为一个java程序猿,经常会被问基础怎么样,对于这个问题,我理解的有两方面:一是对于java基础的理解和掌握,比如JDK的相关特性:二是工作的经历,毕竟,语言编程是一门实战性质的艺术,就算掌握了千万 ...
- 使用 JsPlumb 绘制拓扑图的通用方法
摘要: 实现 JsPlumb 绘制拓扑图的通用方法. 只要服务端返回一个符合指定格式的数据结构,就可以绘制相应的拓扑图. 难度: 中级 示例工程见: http://download.csdn.net ...
- 精简Docker镜像的五种通用方法
http://dockone.io/article/8163 精简Docker镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患.优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而 ...
随机推荐
- 装饰器_python
一.装饰器中提及的知识点 装饰器主要作用:在原函数基础上添加新功能 1.作用域:LEGB 2.高阶函数 3.闭包(在一个内部函数中,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就认 ...
- 题解 CF712C 【Memory and De-Evolution】
看到题我第一反应就是while循环 但是我竟然想正着推,失败,卡了十几分钟 后来我回来看到第三组测试数据 想到倒推 但是没坚持 于是我又卡了很久 过会我又回来想 AC了... 这个故事告诉我们,要努力 ...
- 原来window 也可以使用pthreads
https://blog.csdn.net/clever101/article/details/101029850
- uevent机制
uevent, user space event. 内核与用户空间的一种通信机制,基于netlink机制,主要用于设备驱动模型,例如热插拔. 1.调用/sbin/mdev的流程分析 在驱动程序中经常出 ...
- java中成员变量,局部变量,静态变量的辨析
转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...
- java8 四大核心函数式接口Function、Consumer、Supplier、Predicate(转载)
Function<T, R> T:入参类型,R:出参类型 调用方法:R apply(T t); 定义函数示例:Function<Integer, Integer> func = ...
- HTML的列表标签和表格标签
网页的列表和表格 列表的分类 无序列表 有序列表 自定义列表 有序列表 <!--有序列表--><ol> <li>辽宁</li> <li ...
- oracle中日期的函数的使用
--oracle中trunc()函数的用法 .select trunc(sysdate) from dual --2019-6-18 今天的日期为209-6-18 .select trunc(sysd ...
- Mongo查询list数组中一个字段大于特定条数
由于刚刚接触mongodb,很多语法还不是很了解,写的不好的地方请大佬指出 查询的demo数据 { "_id":Object("xxxxxxxx"), &quo ...
- Linux(Mac)常用命令
df -B[G,M,K]查看磁盘剩余空间 free -mh查看内存 netstat -ntlp查看当前监听的网络端口 mount -t auto /dev/cdrom /media/cdrom挂载cd ...