【问题标题】:Avoid retrofit POJO redundancy避免改造 POJO 冗余
【发布时间】:2017-02-28 05:50:59
【问题描述】:

我有一个 POJO 类进行改造。

    public class AppData(){
      String a;
      String b;
      String c;
      String d;

      public void  setA(String a){
          this.a = a;
       }
      public String getA(){
         return a;
       }
      public void setB(String b){
          this.b = b;
       }
      public String getB(){
         return b;
       }
      public void setC(String c){
          this.c = c;
       }
      public String getC(){
         return c;
       }
      public void setD(String d){
          this.d = d;
       }
      public String getD(){
         return d;
       }
  }

我有 3 个不同的改造请求,我需要 AppData 类。但在请求 1 中,我只需要属性 a 和 b。在请求 2 中,我只需要 a、b、c,而在第三个请求中,我只需要 b、c 和 d。 在参考中,我找到了添加瞬态关键字、添加注释等解决方案。但我没有得到解决方案。有没有办法为所有这 3 个请求使用相同的 POJO 类?

提前致谢

【问题讨论】:

  • 您可以使用相同的 POJO 类而不会出现任何错误。其余变量将为空
  • 您遇到了什么错误,因为它可以完美地工作,只需在进行序列化和反序列化时将未使用的字段值 null ?
  • 最初,当我尝试该实现时存在一些问题,为了管理时间,我将其设置为多余。现在我已经深入了解了这个项目,需要知道我是否删除了会导致问题的冗余。感谢您的宝贵时间

标签: android retrofit2 pojo


【解决方案1】:

你做得对,只有一个类就足够了,在 Call 中为所有三个请求传递你的 AppData 类。

Call<AppData>

响应中返回的任何值都将被更新,例如仅对于第一个请求 a,b 将被类似地设置为其他请求将设置相应的变量,因此在检索时您可以使用相应的 getters

所以对于第一个请求不要尝试检索 c 和 d,否则你会得到 NullPointer 只能使用

response.getA();
response.getB();

类似地,其他请求使用响应中返回的请求

【讨论】:

  • 如果你尝试运行getC()getD() 并且它没有被反序列化,你将不会得到NullPointer 异常,你只会得到null。如果您正在检查值是否返回,这可能很有用。
  • @carlpoole 是正确的值 null 将返回,如果您尝试使用这些变量进行条件检查等,那么您将获得 NullPointer
【解决方案2】:

AppData 对象将适用于所有 3 个请求。未从服务器响应反序列化的值将只是 null

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2017-08-10
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2019-01-02
    相关资源
    最近更新 更多