我有這兩個基類:如何排除超類中的隱藏字段以支持子類GSON中的隱藏字段?
class BasePost {
private String id;
private String creator;
private BasePostMeta postMeta;
}
class BasePostMeta {
private String title;
private String content;
}
和其他一些是擴展它們:
class ProjectPost extends BasePost {
private ProjectPostMeta postMeta;
}
class ProjectPostMeta extends BasePostMeta {
private String startDate;
private String endDate;
}
正如你可以看到我會隱藏postMeta
,如果我需要。
當我嘗試使用GSON對其進行序列化時,我得到了「多個字段」警告postMeta
。我已經利用ExclusionStrategy研究了this answer,但它隱藏了子類字段以支持超類字段。
如何實現其他方式?
聲明你想排除的字段爲'transient',它不會被序列化。 –
@ Jean-BaptisteYunès我不想這樣做,因爲它總是會使它不被序列化。有時候我想隱藏BasePostMeta,但是有時候我不會,因爲BasePost的另一個子類就足夠了。 –
然後編寫你自己的序列化程序...我一般要麼是序列化一個字段,要麼不是兩個字段。如果你真的想要,在兩個子類中派生BasePostMeta,其中一個包含所有字段,而另一個不是,則將postMeta字段重命名爲其他字段以避免衝突並動態選擇要爲該字段實例化的子類。 –