考虑以下声明作为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()
当我修改 getter 以首先检查 null 时,它可以工作,但是..
public Set<String> getBlah() {
if (blah == null)
return new HashSet<Sgring>();
return blah;
}
我很纳闷……为什么不XStream
初始化变量,是否需要惰性实例化?