在 Serializable 类的构造函数中定义对象
Posted
技术标签:
【中文标题】在 Serializable 类的构造函数中定义对象【英文标题】:To define an object in a constructor in Serializable class 【发布时间】:2019-04-22 14:56:58 【问题描述】:我有一个如下图所示的 JSON 响应,并且我创建了一个名为 Project
的可序列化类
在图像中,我的一个对象数组中有两个对象(emergency_contact
和 secondary_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?
【参考方案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
类的构造函数中使用这个对象
我希望它足够清楚,如有任何其他澄清,请随时询问。
快乐编码
【讨论】:
以上是关于在 Serializable 类的构造函数中定义对象的主要内容,如果未能解决你的问题,请参考以下文章
使用静态方法代替使用json_serializable的工厂
使构造函数仅接受 C# 中具有 [Serializable] 属性的对象
Kotlin类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )