Ich habe diese beiden Basisklassen:Wie ausgeblendetes Feld in der Oberklasse zu Gunsten der in Unterklasse GSON auszuschließen?
class BasePost {
private String id;
private String creator;
private BasePostMeta postMeta;
}
class BasePostMeta {
private String title;
private String content;
}
und einige andere, dass sie erstreckt:
class ProjectPost extends BasePost {
private ProjectPostMeta postMeta;
}
class ProjectPostMeta extends BasePostMeta {
private String startDate;
private String endDate;
}
Wie man sehen kann ich das postMeta
verstecken, wenn ich brauche.
Als ich versuchte, es mit GSON zu serialisieren, bekam ich "multiple fields" Warnung für postMeta
. Ich habe in this answer mit ExclusionStrategy untersucht, aber es versteckt das Unterklasse-Feld zugunsten der Superklasse Feld.
Wie erreichen Sie den umgekehrten Weg?
Deklarieren Sie das Feld, das Sie als transient ausschließen möchten, es wird nicht serialisiert. –
@ Jean-BaptisteYunès Ich möchte das nicht tun, weil es es immer nicht serialisiert machen wird. Manchmal möchte ich BasePostMeta verstecken, aber manchmal nicht, weil die Basis in einer anderen Unterklasse von BasePost ausreicht. –
Dann schreibe deinen eigenen Serialisierer ... Ich möchte entweder ein Feld serialisieren oder nicht, aber nicht beides. Wenn Sie wirklich wollen, abgeleitete BasePostMeta in zwei Unterklassen, eine mit allen transiente Felder die andere nicht, benennen Sie das postMeta-Feld in etwas anderes, um Konflikte zu vermeiden und dynamisch wählen welche Unterklasse für das Feld zu instanziieren. –