前言:

由于刚转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 枚举 封装操作方法的更多相关文章

  1. Java 利用枚举封装接口返回 JSON 结构

    利用枚举封装返回码和返回信息 package com.template.project.util; public enum StatusCode { SUCCESS(20000, "成功&q ...

  2. Java枚举的用法和原理深入

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10843644.html 一:枚举的用法 1.定义和组织常量 在JDK1.5之前,我们定义常量都是:publi ...

  3. JAVA枚举操作(获取值,转map集合)

    JAVA枚举相对来说比.NET的枚举功能强大,感觉就像是一种简化版的类对象,可以有构造方法,可以重载,可以继承接口等等,但不能继承类,JAVA枚举在实际开发中应用相当频繁,以下几个封装方法在实际开发中 ...

  4. Java异常封装

    转载: Java异常封装 Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. ...

  5. Java异常封装(自定义错误信息和描述)

    一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...

  6. Java 枚举用法详解

    概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...

  7. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  8. java 枚举的常见使用方法

    JDK1.5引入了新的类型-枚举,枚举的出现在日常开发中带来了极大的方便. 常用方法一:常量 JDK1.5之前我们平时定义系统常量,基本都是用public static final ... 出现枚举以 ...

  9. java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...

随机推荐

  1. 计算机视觉-sift(2)代码理解

    之前结合不同人的资料理解了sift的原理,这里通过opencv中的代码来加深对sift的实现的理解. 使得能够从原理性理解到源码级的理解.不过该博文还是大量基于<赵春江, opencv2.4.9 ...

  2. Linux线程的信号量同步

    信号量和互斥锁(mutex)的区别:互斥锁只允许一个线程进入临界区,而信号量允许多个线程同时进入临界区. 不多做解释,要使用信号量同步,需要包含头文件semaphore.h. 主要用到的函数: int ...

  3. 20155216 Exp8 WEB基础实践

    Exp8 WEB基础实践 实践内容 Apache环境配置 apache是kali下的web服务器,通过访问 ip地址+端口号+文件名称 打开对应的网页. 输入命令 vi /etc/apache2/po ...

  4. 第五节 HTML&CSS -- 关于浮动和清除浮动的解说,以及两个大坑不要踩

    1.随便唠叨几句   这一节课我会对浮动元素和怎样清除浮动相关的技术进行一个讲解,同时,我会列举一些我们前端开发中常见的坑,希望大家以后不要在这些地方犯错.在开始今天的课程之前,有一个东西我需要先讲一 ...

  5. SQLAlchemy 与 fask-SQLAlchemy 中的多表查询例子

    我们知道,<学生.课程.选课>,是一个典型的多对多关系. 现分别用 SQLAlchemy 与 fask-SQLAlchemy 实现. 声明:本人实测通过. 使用 SQLAlchemy fr ...

  6. effective c++ 笔记 (3-4)

    //---------------------------15/03/26---------------------------- 3:const函数的哲学思辨:就当是科普知识吧!如果成员函数是con ...

  7. 架构师修练 I - 超级代码控

    可实现的是架构,空谈是概念 So don't tell me the concepts show me the code!  “不懂编码的架构师不是好架构师” 好架构师都是超级代码控.   代码是最好 ...

  8. Jupyter Notebook 工作空间 / 默认路径 的设置方式

    Jupyter notebook 安装后,启动后,默认的工作空间是当前用户目录.为了方便对文档进行管理,往往需要自行设置工作空间. 下面介绍两种亲试有效的工作空间设置方法. 1.修改快捷方式 对 Ju ...

  9. 阿里云ECS服务器源配置

    前段时间领取了阿里云ECS免费试用6个月的福利,此处记录一下服务器源配置过程和服务器用户创建过程. 一.CentOS源配置 1.备份 mv /etc/yum.repos.d/CentOS-Base.r ...

  10. iOS开发面试题整理

    前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github