2012-06-19 44 views
4

請問,如何在XML中定義像Integer.MAX_VALUE這樣的java常量?我知道如何使用枚舉,但我有第三方庫,必須使用常量進行操作。 例如在xml文件中存在一些值,我希望在生成的java類中聲明爲常量。如何在XStream中使用XML中的常量

XML:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    <code>123</code> 
    <number>1234-456</number> 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
</person> 

的Java:

public class Person { 
private String firstname; 
private String lastname; 
private PhoneNumber phone; 
private PhoneNumber fax; 
// ... constructors and methods 
} 

public class PhoneNumber { 
private int code; 
private String number; 
// ... constructors and methods 
}  

這工作。但是應該是這樣:

XML:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    **<const>**PnoneNumber.LOCAL**</const>** 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
</person> 

Java的應該是:

public class Person { 
private String firstname; 
private String lastname; 
private PhoneNumber phone; 
private PhoneNumber fax; 
// ... constructors and methods 
} 

public class PhoneNumber { 
public static final PnoneNumber LOCAL=new PhoneNumber(123,"1234-456"); 
private int code; 
private String number; 
// ... constructors and methods 
} 

我能做到這一點的簡便方法,沒有自定義轉換?

非常感謝。

+0

XStream的行爲與Java序列化相似,它完全忽略靜態成員。 – user710818

回答

1

我已經研究了幾個XML-POJO生成器,尤其是那些使用XML Schema(XSD)來定義這些類的人,並且讓我驚訝的是沒有人提供修改這些屬性的能力。

如果您想保留您當前的解決方案,我認爲最簡潔的方法是通過您自己的自定義轉換器來擴展轉換,就像您自己所說的那樣。

如果您使用某種使用XML Schema的東西,則始終可以使用屬性fixed="constant"作爲標準初始化,儘管它當然不保留語義。

但是,最好是以其他方式解決問題。這些是常量,它們不應該改變,所以也許最好在一個單獨的文件中定義它們。