前言:

由于刚转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. MVC 在action方法中获取当前action的控制器名和action名

    如何在某个action方法中获取它所在的控制器和action名称呢. string controllerName = Request.RequestContext.RouteData.Values[& ...

  2. php中addslashes(),htmlspecialchars()

    参考转自http://czf2008700.blog.163.com/blog/static/2397283200937103250194/ addslashes -- 使用反斜线引用字符串 stri ...

  3. 【本地服务器】利用openssl生成证书

    (一)下载openssl软件,解压,进入bin目录 下载地址 (二)1.在当前bin目录,按住shift键右击,选择"在此处打开命令窗口" 2.打开cmd命令窗口之后,在窗口中输入 ...

  4. 20155210 Exp7 网络欺诈防范

    Exp7 网络欺诈防范 SET工具建立冒名网站 首先利用lsof -i:80或者netstat -tupln |grep 80查询80端口的使用情况(我的电脑80端口没有被占用,如果被占用,则用kil ...

  5. 20155318 《网络攻防》 Exp7 网络欺诈防范

    20155318 <网络攻防> Exp7 网络欺诈防范 基础问题 通常在什么场景下容易受到DNS spoof攻击 DNS spoof攻击即执行DNS欺骗攻击,通过使用Ettercap来进行 ...

  6. Hadoop日记Day11---主从节点接口分析

    一.NameNode 的接口分析 1. NameNode本质 经过前面的学习,可以知道NameNode 本身就是一个java 进程.观察RPC.getServer()方法的第一个参数,发现是this, ...

  7. 谷歌商店高级搜索 Google play advanced search

    这个问题一直搜索了很久都没有答案,后来在StackOverflow上提问,很久也没人回答. 详见我的SO:https://stackoverflow.com/questions/52939493/ho ...

  8. 2014.8.23 Research Meeting Report

    Dear All: It was good talk yesterday. However, I want to emphasize that, finally it is the *work* an ...

  9. 树莓派3b安装Nginx和php7和百度语音合成模块

    1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...

  10. Linux下tomcat的启动,关闭,以及shutdown失败杀死进程的方法

    1.tomcat服务器第一次启动并查看启动日志的命令 在 ../bin 文件夹下输入./startup.sh;tail -f ../logs/catalina.out 2.需要重启服务器的时候 在 . ...