前言:
由于刚转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());
}
}