java——枚举类型通过反射获取属性值并合成Map进行对比取值
枚举类型:
public enum ProfitSharing {
/**
* 否
*/
NO("0", "否"),
/**
* 是
*/
YES("1", "是");
private final String code;
private final String info;
ProfitSharing(String code, String info) {
this.code = code;
this.info = info;
}
@Override
public String getCode() {
return code;
}
@Override
public String getInfo() {
return info;
}
}
创建泛型方法进行对比取值:
/**
* @param a 传入即将对比的Code值
* @param classz 枚举类型类
* @return
*/
public String dictionaryTranslation(Object a,Class<?> classz){
try{
Map map = new HashMap<>();
for (Object o : classz.getEnumConstants()){
Class<?> c = o.getClass();
Method getCode = c.getDeclaredMethod("getCode");
Method getInfo = c.getDeclaredMethod("getInfo");
String code = (String) getCode.invoke(o);
String info = (String) getInfo.invoke(o);
System.out.println("code = " + code);
System.out.println("info = " + info);
map.put(code,info);
}
Map.Entry stringStringEntry = map.entrySet().stream().filter(entry -> Objects.equals(entry.getKey(), String.valueOf(a))).findFirst().orElse(null);
if (stringStringEntry != null) {
return stringStringEntry.getValue();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
测试类:
@Test
public void testClass(){
String a = dictionaryTranslation(0,ProfitSharing.class);
System.out.println("a= " + a);
}
结果:
code = 0 info = 否 code = 1 info = 是 a = 否