Betrachten Sie die folgende Erklärung als Teil SomeClass
Variable Initialisierung Vergangenheit Xstream
private Set<String> blah = new HashSet<String>();
in einer Klasse hergestellt, die später ist
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
StringBuilder json = new StringBuilder(xstream.toXML(SomeClass));
rd = (SomeClass) xstream.fromXML(json.toString());
Wenn ich @Test
assertTrue(rd.getBlah().size() == 0);
ich eine bekommen NPE
auf rd.getBlah()
Wenn ich statt Initialisierung vorne, Ort der Initialisierung auf einen Konstruktor SomeClass
public SomeClass() {
blah = new HashSet<String>();
}
Das gleiche Problem - NPE
auf rd.getBlah()
Wenn ich die Getter ändern zuerst für null zu überprüfen, es funktioniert aber ..
public Set<String> getBlah() {
if (blah == null)
return new HashSet<Sgring>();
return blah;
}
ich bin verwirrt ... Warum initialisieren nicht XStream
nicht Variablen und ob faule Instanziierung notwendig ist?
Ich bin ein wenig verwirrt durch xstream.toXML (Someclass); Sollte es nicht xstream.toXML (Objekt) sein, wo das Objekt vom Typ SomeClass ist? – Max
Wenn es etwas gibt, wissen wir, dass 'SomeClass' ganz sicher vom' SomeClass' ist :) – JAM
Mein Punkt war: Nehmen Sie, was Sie oben auf Nennwert geschrieben haben, wenn SomeClass ein Typ ist, dann Ihr Code oben tut nicht kompilieren. SomeClass ist nicht vom Typ SomeClass und auch SomeClass.class vom Typ SomeClass ... – Max