[英]java reuse code in enum
我有一個如下的枚舉:
public enum EOrderStatus {
DELETE(0, "aaaa"),
CANCEL(1, "bbb"),
APPEND(2, "cccc");
private EOrderStatus(int value, String description)
{
Description = description;
Value = value;
}
//region common
public String getDescription() {
return Description;
}
protected void setDescription(String description) {
Description = description;
}
// 此枚舉的描述,此值可以用於日志顯示,或接口返回說明等
private String Description;
public int getValue() {
return Value;
}
protected void setValue(int value) {
Value = value;
}
// int 值
private int Value;
//endregion
}
我有100多個這樣的枚舉。 如何在區域和末端區域之間重用代碼? ................................................... ..........
不知道這是否是一個好習慣,但是我想說您不能真正排除變量,但是如果您願意使用反射,則可以省去重復使用這些方法的麻煩。
鑒於這些枚舉:
enum Enum1 {
DELETE(10, "aaaa1"),
CANCEL(11, "bbb1"),
APPEND(12, "cccc1");
public final String description;
public final int value;
private Enum1(int value, String description) {
this.description = description;
this.value = value;
}
}
enum Enum2 {
DELETE(20, "aaaa2"),
CANCEL(21, "bbb2"),
APPEND(22, "cccc2");
public final String description;
public final int value;
private Enum2(int value, String description) {
this.description = description;
this.value = value;
}
}
您可以創建一個utils類,該類使用反射讀取值:
class EnumUtils {
public static String getDescription(Class enumClass, String enumName) {
return (String) getFieldValue(enumClass, enumName, "description");
}
public static int getValue(Class enumClass, String enumName) {
return (Integer) getFieldValue(enumClass, enumName, "value");
}
public static Object getFieldValue(Class enumClass, String enumName, String fieldName) {
Object value = null;
Enum e = Enum.valueOf(enumClass, enumName);
try {
Field descriptionField = e.getClass().getDeclaredField(fieldName);
value = descriptionField.get(e);
} catch(NoSuchFieldException | IllegalAccessException ex) { /* Handle that as you want */ }
return value;
}
}
然后,您可以通過以下方式使用它:
public static void main(String[] args) {
System.out.println(EnumUtils.getDescription(Enum1.class, "DELETE"));
System.out.println(EnumUtils.getDescription(Enum2.class, "DELETE"));
System.out.println(EnumUtils.getValue(Enum1.class, "CANCEL"));
System.out.println(EnumUtils.getValue(Enum2.class, "APPEND"));
}
輸出
aaaa1
aaaa2
11
22
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.