java 枚举 封装操作方法
前言:
由于刚转java项目,所以对于java语言比较陌生,尤其是lambda和一些诸如(一个java文件只能有一个public class)等等的零散知识点之类。。。
使我觉得就语言的层级来说。.net真的超越java不是一星半点。奈何.net跨平台晚,社区力量也小。
相交枚举而言。真的没有 .net中给枚举添加attrbuite来的方便。.net枚举:http://blog.csdn.net/hanjun0612/article/details/70807664
由于公司需要多语言,所以枚举中希望能增添额外的属性。并且提供共同的操作方法。
下面给大家看一下java中的枚举操作方法的封装。(由于是java的菜鸡,所以将就着用)
先看一下文件结构
然后我们看一下各个文件:
一:EnumItem
封装了一些常用属性,属性命名很直白了,就不解释了
(这里key设置了泛型,是由于特殊情况不需要Integer类型)
public class EnumItem<T> {
private T itemKey;
private String itemValue;
private String itemCN;
private String itemEN;
public EnumItem(){}
public T getItemKey() {
return itemKey;
}
public void setItemKey(T itemKey) {
this.itemKey = itemKey;
}
public String getItemValue() {
return itemValue;
}
public void setItemValue(String itemValue) {
this.itemValue = itemValue;
}
public String getItemCN() {
return itemCN;
}
public void setItemCN(String itemCN) {
this.itemCN = itemCN;
}
public String getItemEN() {
return itemEN;
}
public void setItemEN(String itemEN) {
this.itemEN = itemEN;
}
}
二 EnumList
存放枚举值,每个枚举都继承了IEnumList接口,并且重写了getEnumItem()方法。
不知道接口能不能通过 default来默认实现。大家可以尝试一下。
public class EnumList{
public interface IEnumList {
EnumItem getEnumItem();
}
//region SexEnum
public enum SexEnum implements IEnumList {
WOMAN(0, "女","F","0"),
MAN(1, "男","M","1");
private EnumItem item=new EnumItem();
SexEnum(Integer itemKey,String itemCN,String itemEN,String itemValue) {
item.setItemKey(itemKey);
item.setItemCN(itemCN);
item.setItemEN(itemEN);
item.setItemValue(itemValue);
}
@Override
public EnumItem<Integer> getEnumItem() {
return item;
}
}
//endregion
//region IsDeleteEnum
public enum IsDeleteEnum implements IEnumList {
No(0d, "否","No","0"),
Yes(1.3d, "是","Yes","1.3");
private EnumItem item=new EnumItem();
IsDeleteEnum(Double itemKey,String itemCN,String itemEN,String itemValue) {
item.setItemKey(itemKey);
item.setItemCN(itemCN);
item.setItemEN(itemEN);
item.setItemValue(itemValue);
}
@Override
public EnumItem<Double> getEnumItem() {
return item;
}
}
//endregion
}
三 EnumHelper
重头戏,注释比较简单,大家应该明白的。
public class EnumHelper {
/**
* 获取枚举集合
*
* Enum
*
* @param <T>
* @return List<EnumItem>
*/
public static <T extends EnumList.IEnumList> List<EnumItem> getEnumList(
Class<? extends EnumList.IEnumList> enumClass) {
T[] q = (T[]) enumClass.getEnumConstants();
List<EnumItem> v = Arrays.stream(q).map(T::getEnumItem).collect(Collectors.toList());
return v;
}
/**
* 根据枚举类型和key获取信息
*
* @param enumClass
* Enum
* @param key
* Enum key
* @param <T>
* @return EnumItem
*/
public static <T extends EnumList.IEnumList> EnumItem getEnumItem(Class<? extends EnumList.IEnumList> enumClass,
Integer key) {
T[] q = (T[]) enumClass.getEnumConstants();
Optional<T> v = (Arrays.stream(q)).filter(x -> x.getEnumItem().getItemKey() == key).findFirst();
if (v.equals(Optional.empty()))
return null;
T r = v.get();
EnumItem s = r.getEnumItem();
return s;
}
/**
* 根据枚举类型和value获取信息
*
* @param enumClass
* Enum
* @param value
* Enum value
* @param <T>
* @return EnumItem
*/
public static <T extends EnumList.IEnumList> EnumItem getEnumItem(Class<? extends EnumList.IEnumList> enumClass,
String value) {
T[] q = (T[]) enumClass.getEnumConstants();
Optional<T> v = (Arrays.stream(q)).filter(x -> x.getEnumItem().getItemValue() == value).findFirst();
if (v.equals(Optional.empty()))
return null;
T r = v.get();
EnumItem s = r.getEnumItem();
return s;
}
}
四 TestApplication
测试运行
public class TestApplication {
public static void main(String[] args) {
//直接通过枚举值来获取信息
EnumItem q = EnumList.SexEnum.WOMAN.getEnumItem();
System.out.println(q.getItemEN());
//获取Sex枚举信息
List<EnumItem> s = EnumHelper.getEnumList(EnumList.SexEnum.class);
System.out.println(s.get(0).getItemCN());
System.out.println(s);
//根据枚举类型 和 key 获取此枚举信息
EnumItem v = EnumHelper.getEnumItem(EnumList.SexEnum.class,1);
System.out.println(v.getItemEN());
}
}
java 枚举 封装操作方法的更多相关文章
- Java 利用枚举封装接口返回 JSON 结构
利用枚举封装返回码和返回信息 package com.template.project.util; public enum StatusCode { SUCCESS(20000, "成功&q ...
- Java枚举的用法和原理深入
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843644.html 一:枚举的用法 1.定义和组织常量 在JDK1.5之前,我们定义常量都是:publi ...
- JAVA枚举操作(获取值,转map集合)
JAVA枚举相对来说比.NET的枚举功能强大,感觉就像是一种简化版的类对象,可以有构造方法,可以重载,可以继承接口等等,但不能继承类,JAVA枚举在实际开发中应用相当频繁,以下几个封装方法在实际开发中 ...
- Java异常封装
转载: Java异常封装 Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. ...
- Java异常封装(自定义错误信息和描述)
一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- Java面向对象㈠ -- 封装
Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...
- java 枚举的常见使用方法
JDK1.5引入了新的类型-枚举,枚举的出现在日常开发中带来了极大的方便. 常用方法一:常量 JDK1.5之前我们平时定义系统常量,基本都是用public static final ... 出现枚举以 ...
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
随机推荐
- 计算机视觉-sift(2)代码理解
之前结合不同人的资料理解了sift的原理,这里通过opencv中的代码来加深对sift的实现的理解. 使得能够从原理性理解到源码级的理解.不过该博文还是大量基于<赵春江, opencv2.4.9 ...
- Linux线程的信号量同步
信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区. 不多做解释,要使用信号量同步,需要包含头文件semaphore.h. 主要用到的函数: int ...
- 20155216 Exp8 WEB基础实践
Exp8 WEB基础实践 实践内容 Apache环境配置 apache是kali下的web服务器,通过访问 ip地址+端口号+文件名称 打开对应的网页. 输入命令 vi /etc/apache2/po ...
- 第五节 HTML&CSS -- 关于浮动和清除浮动的解说,以及两个大坑不要踩
1.随便唠叨几句 这一节课我会对浮动元素和怎样清除浮动相关的技术进行一个讲解,同时,我会列举一些我们前端开发中常见的坑,希望大家以后不要在这些地方犯错.在开始今天的课程之前,有一个东西我需要先讲一 ...
- SQLAlchemy 与 fask-SQLAlchemy 中的多表查询例子
我们知道,<学生.课程.选课>,是一个典型的多对多关系. 现分别用 SQLAlchemy 与 fask-SQLAlchemy 实现. 声明:本人实测通过. 使用 SQLAlchemy fr ...
- effective c++ 笔记 (3-4)
//---------------------------15/03/26---------------------------- 3:const函数的哲学思辨:就当是科普知识吧!如果成员函数是con ...
- 架构师修练 I - 超级代码控
可实现的是架构,空谈是概念 So don't tell me the concepts show me the code! “不懂编码的架构师不是好架构师” 好架构师都是超级代码控. 代码是最好 ...
- Jupyter Notebook 工作空间 / 默认路径 的设置方式
Jupyter notebook 安装后,启动后,默认的工作空间是当前用户目录.为了方便对文档进行管理,往往需要自行设置工作空间. 下面介绍两种亲试有效的工作空间设置方法. 1.修改快捷方式 对 Ju ...
- 阿里云ECS服务器源配置
前段时间领取了阿里云ECS免费试用6个月的福利,此处记录一下服务器源配置过程和服务器用户创建过程. 一.CentOS源配置 1.备份 mv /etc/yum.repos.d/CentOS-Base.r ...
- iOS开发面试题整理
前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github