如何排除超类中的隐藏字段,转而使用子类GSON中的隐藏字段?

时间:2016-04-02 07:00:58

标签: java android 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,但它隐藏了子类字段,支持超类字段。

如何实现相反的方式?

1 个答案:

答案 0 :(得分:0)

尝试使用泛型和类型参数。假设你的基类是:

public class AbstractPost<T> {
  private T postMeta;
}

BasePost可以更改为:

public class BasePost<BasePostMeta> {
  private BasePostMeta postMeta;
}

ProjectPost

public class ProjectPost<ProjectPostMeta> {
  private ProjectPostMeta postMeta;
}

这样你只有一个名为postMeta的字段,Gson应该能够找出它的类型。