고정 길이 데이터 레코드를 처리하는 코드가 있습니다. 나는 자바 enum을 사용하여 레코드 구조를 정의했다. 열거 형 내부의 정적 변수에 액세스하기 위해 현재 점프해야하는 농구를 설명하기 위해 가능한 가장 간단한 예제를 끓여 냈습니다. 이 변수를 간과 할 수있는 더 좋은 방법이 있습니까? 코드를 컴파일하고 실행하면 각 문자열을 XML 청크로 변환합니다. XML을 수동으로 처리 했으므로 예제가 더 간단하지만 실제 코드는 Java DOM을 사용합니다.클래스 인스턴스가없는 enum 클래스의 정적 변수에 어떻게 액세스합니까?
EDIT : 코드를보다 완벽한 예제로 업데이트하여 내가하려는 것을 더 잘 보여줄 것으로 생각합니다.
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;
}
}
난 아직도 이유를 보지 않는다, 그들은 인스턴스 수준과 최종 –