次の宣言をSomeClass
private Set<String> blah = new HashSet<String>();
後でクラスで作成
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
StringBuilder json = new StringBuilder(xstream.toXML(SomeClass));
rd = (SomeClass) xstream.fromXML(json.toString());
私がいつ@Test
assertTrue(rd.getBlah().size() == 0);
私はNPE
オンになりますrd.getBlah()
前もって初期化する代わりに、初期化をコンストラクターに配置すると、SomeClass
public SomeClass() {
blah = new HashSet<String>();
}
同じ問題 -NPE
オンrd.getBlah()
最初に null をチェックするようにゲッターを変更すると機能しますが、..
public Set<String> getBlah() {
if (blah == null)
return new HashSet<Sgring>();
return blah;
}
私は困惑しています...XStream
変数を初期化しないのはなぜですか?また、遅延インスタンス化が必要なのですか?