我有一些處理固定長度數據記錄的代碼。我用java枚舉定義了記錄結構。我把它簡化成最簡單的例子來說明我現在必須跳過的框架才能訪問枚舉中的靜態變量。有沒有更好的方法來獲得我忽略的這個變量?如果您編譯並運行代碼,它會將每個字符串轉換爲XML塊。我已經手動完成了XML,因此該示例更簡單,但我的真實代碼使用Java DOM。如何在沒有類實例的情況下訪問枚舉類中的靜態變量?
編輯:我已經更新了一個更完整的例子,我認爲更好地顯示了我想要做的事。
class EnumTest
{
public static void main(String args[])
{
System.out.println(parse("ABC", RecordType1.class));
System.out.println(parse("ABCDEF", RecordType2.class));
}
private interface RecordLayout {
public int length();
}
private enum RecordType1 implements RecordLayout {
FIELD1 (2),
FIELD2 (1),
;
private int length;
private RecordType1(int length) { this.length = length; }
public int length() { return length; }
public static int RECORD_LEN = 3;
}
private enum RecordType2 implements RecordLayout {
FIELD1 (5),
FIELD2 (1),
;
private int length;
private RecordType2(int length) { this.length = length; }
public int length() { return length; }
public static int RECORD_LEN = 6;
}
private static <E extends Enum<E> & RecordLayout> String parse(String data, Class<E> record) {
// ugly hack to get at RECORD_LEN...
int len = 0;
try {
len = record.getField("RECORD_LEN").getInt(record);
}
catch (Exception e) { System.out.println(e); }
String results = "<RECORD length=\"" + len + "\">\n";
int curPos = 0;
for (E field: record.getEnumConstants()) {
int endPos = curPos + field.length();
results += " <" + field.toString() + ">"
+ data.substring(curPos, endPos)
+ "</" + field.toString() + ">\n";
curPos = endPos;
}
results += "</RECORD>\n";
return results;
}
}
我還沒有看到一個原因,他們是靜態的,也可以是實例級和最終 – 2010-05-19 22:16:50