考慮以下聲明爲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()
當我修改吸氣先檢查空,它的工作原理,但..
public Set<String> getBlah() {
if (blah == null)
return new HashSet<Sgring>();
return blah;
}
我百思不得其解......爲什麼XStream
無法初始化變量以及是否需要延遲實例化?
我有些困惑通過xstream.toXML(SomeClass的);它不應該是xstream.toXML(object)其中object是SomeClass類型嗎? – Max 2012-04-04 22:32:42
如果有什麼我們知道的是'SomeClass'肯定是'SomeClass'類型的。:) – JAM 2012-04-05 00:16:40
我的觀點是:把你在面值上面寫的東西,如果SomeClass是一個類型,那麼你的代碼在上面不編譯。 SomeClass的類型不是SomeClass的,而且也不是類型SomeClass的的SomeClass.class ... – Max 2012-04-05 01:23:34