W mojej aplikacji Java zdefiniowałem dwie klasy o nazwie A
i B
, gdzie B
jest wewnętrzną klasą A
. Oba są zdefiniowane jako serializableGSON nie deserializuje odwołania do zewnętrznej klasy
public class A implements Serializable {
int attrParent;
List<B> items = new ArrayList<B>();
public void setAttrParent(int attrParent) {
this.attrParent = attrParent;
}
public int getAttrParent() {
return attrParent;
}
public class B implements Serializable {
private int attr;
public void setAttr(int attr) {
this.attr = attr;
}
public int getAttr() {
return attr;
}
public int getSomeCalculationValue() {
return this.attr * A.this.attrParent; // Problems occurs here
}
}
}
Przed szeregowania ten obiekt z GSON, getSomeCalculationValue
działa dobrze. Ale po serializowanie i deserializowanie, getSomeCalculationValue
kończy się niepowodzeniem z NullPointerException
.
Dzieje się tak, ponieważ wewnętrzna klasa B
nie ma już odniesienia do klasy zewnętrznej A
, a więc A.this
zawodzi.
Czy ktoś wie, jak rozwiązać ten problem, czyli przywracając wewnętrzny do zewnętrznego odniesienia podczas deserializacji tego obiektu?
Proszę pokazać proces serializacji i deserializacji, a także przykładowy gson. Nie rozumiem, dlaczego potrzebujesz "Serializable" tutaj. –