Рассмотрим следующую декларацию в рамках SomeClass
инициализации переменной мимо Xstream
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 (объект), где объект имеет тип SomeClass? – Max
Если есть что-то, что мы знаем, это то, что 'SomeClass', безусловно, относится к типу' SomeClass' :) – JAM
Моя мысль заключалась в том, что вы взяли то, что вы написали выше по номиналу, если SomeClass - это тип, тогда ваш код выше не компилировать. SomeClass не имеет тип SomeClass, и не является SomeClass.class типа SomeClass ... – Max