【问题标题】:To define an object in a constructor in Serializable class在 Serializable 类的构造函数中定义对象
【发布时间】:2019-04-22 14:56:58
【问题描述】:

我有一个如下图所示的 JSON 响应,并且我创建了一个名为 Project 的可序列化类

在图像中,我的一个对象数组中有两个对象(emergency_contactsecondary_owner)。我试图弄清楚是否要做什么来定义对象,因为我希望这些细节出现在我的构造函数中。

到目前为止我已经这样做了:

public class Project implements Serializable {
   public int id;
   public String name;
   public String additional_information;
   //Now what to do Emergency contact

   public Project(int id, String name, String additional_information){

   }
}

我曾想过这样做,public EmergencyContact emergency = new EmergencyContact(param1, param2)

并创建一个名为EmergencyContact 的新类,并为参数执行getter 和setter。但是这样做之后,我仍然很困惑,我将如何定义它我的构造函数?

我知道我很接近,但我需要一些帮助。

【问题讨论】:

  • public Project(int id, String name, String additional_information, EmergencyContact emergencyContact) - 与构造函数中的任何其他字段相同
  • 您还必须为两个嵌套对象定义类。
  • 你能告诉我关于代码的问题吗@IvanKaloyanov?

标签: java android json serializable


【解决方案1】:

当然。您需要:

public class EmergencyContact implements Serializable {

   public String name;
   public String number;

   public EmergencyContact(String name, String number){
     // assign fields 
   }
}

还有一个给所有者:

public class EmergencyOwner implements Serializable {

   public String name;
   public String number;

   public EmergencyOwner(String name, String number){
     // assign the fields
   }
}

然后在您的 Project 类中,您可以添加这些类的字段:

public class Project implements Serializable {
   public int id;
   public String name;
   public String additional_information;
   public EmergencyContact emergency_contact;
   public EmergencyOwner emergency_owner;

   public Project(int id, String name, String additional_information, EmergencyContact emergency_contact, EmergencyOwner emergency_owner){
     // assign the fields here as well
   }
}

就是这样。如果这是该问题的答案,请考虑删除此问题,因为它在 100% 上重复:)

【讨论】:

    【解决方案2】:

    请注意,从干净代码参数的角度来看,字段应该是私有的,并使用 setter / getter 设置/检索这些字段的值。

    public class Project implements Serializable {
       private int id;
       private String name;
       private String additional_information;
       private EmergencyContact emergency_contact;
       private SecondaryOwner secondary_owner;
    
       public Project(int id, String name, String additional_information, EmergencyContact emergencyContact, SecondaryOwner secondaryOwner){
           this.id = id;
           this.name = name;
           this.additional_information = additional_information;
           this.emergency_contact = emergencyContact;
           this.secondary_owner = secondaryOwner;
       }
    }
    

    您将以相同的方式定义其他两个类。现在,您可能对 EmergencyContact 和 SecondaryOwner 类的构造函数感到困惑。您可以同时设置默认构造函数(不带参数)和自定义构造函数(带参数,就像上面的那样)。如果使用默认构造函数,请确保为对象中的字段设置值,如下所示:

    EmergencyContact emergencyContact = new EmergencyContact();
    emergencyContact.setName("the name");
    emergencyContact.setNumber("a number");
    

    那么你可以在Project类的构造函数中使用这个对象

    我希望它足够清楚,如有任何其他澄清,请随时询问。

    快乐编码

    【讨论】:

      猜你喜欢
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多