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镜像的好处很多,不仅可以节省存储空间和带宽,还能减少安全隐患.优化镜像大小的手段多种多样,因服务所使用的基础开发语言不同而 ...
随机推荐
- mybatis(五):源码分析 - 参数映射流程
- Atcoder Beginner Contest 156E(隔板法,组合数学)
#define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ; ; long long fac[N] ...
- linux异常 - 弹出界面 eth0:设备eth0似乎不存在
问题描述: 用VMware vSphere Client复制虚拟机之后,出现这个问题 解决方法: service network stop service NetworkManager restart
- [BJOI2012]连连看
Description Luogu4134 Solution \(l,r \le 1000\),暴力枚举是否能匹配.这是一个选匹配的问题,所以直接网络流,原图不一定是二分图咋办?拆点啊!然后直接做就行 ...
- C++ windows线程操作(转)
参考 1._beginthreadex创建线程 DWORD m_dwMSGTID; // 线程ID HANDLE m_hMSG; // 线程句柄 m_hMSG = (HANDLE)_beginthre ...
- Rider代码格式设置
单选注释格式设置: File/Settings(Ctrl+Alt+S/Command+Option+S)/Code Style/C#选择Other
- Java爬虫学习(2)之用对象保存文件demo(1)
package com.mieba.spider; import java.util.ArrayList; import java.util.List; import java.util.Vector ...
- AcWing 859. Kruskal算法求最小生成树 稠密图
//稠密图 #include <cstring> #include <iostream> #include <algorithm> using namespace ...
- 3.0 java学习网站
1.http://www.rupeng.com/Courses/Index/51 2.https://www.zhihu.com/question/25255189
- java 实体类 时间格式字段注解
@DatetimeFormat是将String转换成Date,一般前台给后台传值时用 @JsonFormat(pattern="yyyy-MM-dd") 将Date转换成Strin ...