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
由于公司需要多语言,所以枚举中希望能增添额外的属性。
并且提供共同的操作方法。
然后我们看一下各个文件:
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;
}
}
不知道接口能不能通过 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
}
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;
}
}
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语言比较陌生,尤其是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操作方法封装:Java Utils
- Java 枚举 封装 错误代码
- java使用枚举封装错误码及错误信息
- 一个封装了数据库大部分操作的JavaBean
- IP层的封装(Java的InetAddress类的C++实现)
- JAVA中BigDicemal类的封装应用
- Java异常处理的基本封装
- Java中封装配置文件(1)-使用Properties (转)
- Java中使用枚举
- java中的日志操作方法---Log4J
- 枚举类型入门用 Java 5.0 以类型安全的方式表示常量[摘]
- Java中封装配置文件(1)-使用Properties
- Java中字符串基本操作方法
- java中字符串操作方法整理
- CMPP3.0的java封装
- JAVA LOG4J管理(续JAVA中LOG4J的封装)
- Java中基本数据类型与流的操作方法
- 封装Java数据库操作的类
- JAVA:数据库操作封装(1)
- 针对JSON的基于java和js多种操作方法与格式转换方法