您的位置:首页 > 编程语言 > Java开发

java 枚举 封装操作方法

2017-06-02 17:15 316 查看
前言: 

由于刚转java项目,所以对于java语言比较陌生,尤其是lambda和一些诸如(一个java文件只能有一个public class)等等的零散知识点之类。。。

使我觉得就语言的层级来说。.net真的超越java不是一星半点。奈何.net跨平台晚,社区力量也小。

相交枚举而言。真的没有 .net中给枚举添加attrbuite来的方便。.net枚举:http://blog.csdn.net/hanjun0612/article/details/70807664

由于公司需要多语言,所以枚举中希望能增添额外的属性。
并且提供共同的操作方法。

下面给大家看一下java中的枚举操作方法的封装。(由于是java的菜鸡,所以将就着用)

先看一下文件结构



然后我们看一下各个文件:

一:EnumItem

封装了一些常用属性,属性命名很直白了,就不解释了

public class EnumItem {

private int itemKey;
private String itemValue;
private String itemCN;
private String itemEN;

public EnumItem(){}

public int getItemKey() {
return itemKey;
}

public void setItemKey(int 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(int itemKey,String itemCN,String itemEN,String itemValue) {
item.setItemKey(itemKey);
item.setItemCN(itemCN);
item.setItemEN(itemEN);
item.setItemValue(itemValue);

}

@Override
public EnumItem getEnumItem() {
return item;
}
}
//endregion

//region IsDeleteEnum
public enum IsDeleteEnum implements IEnumList {
No(0, "否","No","0"),
Yes(1, "是","Yes","1");

private EnumItem item=new EnumItem();

IsDeleteEnum(int itemKey,String itemCN,String itemEN,String itemValue) {
item.setItemKey(itemKey);
item.setItemCN(itemCN);
item.setItemEN(itemEN);
item.setItemValue(itemValue);

}

@Override
public EnumItem getEnumItem() {
return item;
}
}
//endregion
}

三  EnumHelper

重头戏,注释比较简单,大家应该明白的。

public class EnumHelper {

/**
* 获取枚举集合
* @param value Enum
* @param <T>
* @return List<EnumItem>
*/
public static <T extends EnumList.IEnumList> List<EnumItem> getEnumList(Class<? extends EnumList.IEnumList> value) {
T[] q=(T[]) value.getEnumConstants();
List<EnumItem> v= Arrays.stream(q).map(T::getEnumItem).collect(Collectors.toList());
return v;
}

/**
* 根据枚举类型和key获取信息
* @param value Enum
* @param key Enum key
* @param <T>
* @return EnumItem
*/
public static <T extends EnumList.IEnumList> EnumItem getEnumItem(Class<? extends EnumList.IEnumList> value,int key) {
T[] q=(T[]) value.getEnumConstants();
T v=(Arrays.stream(q)).filter(x-> x.getEnumItem().getItemKey()==key).findFirst().get();
if(v==null)
return null;
EnumItem s= v.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 枚举