在Java中创建对象并通过传递参数对其进行初始化
我正在尝试创建一个新对象,并使用以下命令传递的参数对其进行初始化:在Java中创建对象并通过传递参数对其进行初始化,java,object,parameters,Java,Object,Parameters,我正在尝试创建一个新对象,并使用以下命令传递的参数对其进行初始化: java-jar-FILE.jar store Information.dat ClientName“Address”City-Country-HomePhone-OfficePhone-mobile 如果ClientName是客户的名称,的“Address”包含客户的地址等。客户可以拥有家庭电话或办公电话或手机或所有这些电话号码,甚至更多的电话号码 下面是我试图用参数初始化的类: private static void Sav
java-jar-FILE.jar store Information.dat ClientName“Address”City-Country-HomePhone-OfficePhone-mobile
如果ClientName
是客户的名称,的“Address”
包含客户的地址等。客户可以拥有家庭电话
或办公电话
或手机
或所有这些电话号码,甚至更多的电话号码
下面是我试图用参数初始化的类:
private static void SaveClient(String[] args) throws Exception
{
Client SaveClient = new Client(...);
....
out.writeObject(SaveClient);
out.close();
}
以下是客户端
构造函数:
public class Client{
private String ClientName;
private Address address;
private List<String> PhoneNumbers;
public Client() {
this.PhoneNumbers = new ArrayList<String>();
}
public Client(String ClientName, Address address) {
this();
this.name = ClientName;
this.address = address;
}
public void AddPhoneNumber(String number) {
this.PhoneNumbers.add(number);
}
....
}
公共类客户端{
私有字符串ClientName;
私人地址;
私人电话号码列表;
公共客户机(){
this.PhoneNumbers=new ArrayList();
}
公共客户端(字符串ClientName、地址){
这个();
this.name=ClientName;
this.address=地址;
}
公共无效AddPhoneNumber(字符串编号){
此.PhoneNumbers.add(number);
}
....
}
但我不知道如何用传递的参数初始化它。我们可以假设信息是有效的,而且我不想仅仅修改
SaveClient
就对“Client”构造函数进行任何更改,使用字符串[]args
,根据需要转换这些参数(例如,转换为int、long、String或您需要的任何内容)和
然后将它们传递给
客户机构造函数 假设您的客户机类具有所需的所有属性,并且args数组元素的位置已知,那么您可以这样做
Public Client (String[] args){
this.address = args[6]; // Based on your edit this will need to be an Address object. may look something like: this.address = new Address(args[6]); assuming Address object has a constructor that accepts String
....
}
如果字符串数组的顺序不正确,或者东西在错误的位置,或者根本不在那里,这可能会变得非常糟糕。如果您试图保存的客户端
属性是int
或double
或诸如此类的属性,您还必须执行一些强制转换(转换值类型),因为args元素首先是字符串
s,您需要确定提供的参数数量是否满足您的预期需要
// This assumes that address, city, country, home phone,
// office and cell phone are optional
if (args.length >= 3) {...
或
如果这两种情况中的任何一种都不真实(根据您的需要),那么您应该显示某种错误消息,并可能退出
然后需要从args
中提取值
// This assumes that some of the arguments are optional...
String clientName = args[2];
String address = args.length > 3 ? args[3] : null;
String city = args.length > 4 ? args[4] : null;
String country = args.length > 5 ? args[5] : null;
String homePhone = args.length > 6 ? args[6] : null;
String officePhone = args.length > 7 ? args[7] : null;
String cellPhone = args.length > 8 ? args[8] : null;
或
然后创建您的客户端
对象
Client client = new Client(
clientName,
address,
city,
country,
homePhone,
officePhone,
cellPhone);
当然,这意味着您的客户机对象将需要一个能够接受您提供的信息的构造函数。您的示例客户端
不起作用,除了它有一个无效的Person
构造函数之外,它没有办法接受所有这些信息
public class Client{
private String ClientName;
private Address address;
private List<String> PhoneNumbers;
public Client() {
this.PhoneNumbers = new ArrayList<String>();
}
public Client(String clientName, String address, String city, String country, String homePhone, String officePhone, String cellPhone) {
this();
ClientName = clientName;
address = new Address(...); // No idea of the parameters for this...
AddPhoneNumber(homePhone);
AddPhoneNumber(officePhone);
AddPhoneNumber(cellPhone);
}
公共类客户端{
私有字符串ClientName;
私人地址;
私人电话号码列表;
公共客户机(){
this.PhoneNumbers=new ArrayList();
}
公共客户端(字符串客户端名称、字符串地址、字符串城市、字符串国家、字符串家庭电话、字符串电话、字符串手机){
这个();
ClientName=ClientName;
address=新地址(…);//不知道此地址的参数。。。
AddPhoneNumber(家庭电话);
AddPhoneNumber(officePhone);
AddPhoneNumber(手机);
}
例如…这取决于您的客户机
构造函数。请显示它。@RGETMAN用客户机
构造函数更新了问题。如果我丢失了,我们可以假设用户输入了有效信息,所以所有字段都是必填的?然后按照注释的必填分支进行操作……我们可以创建一个循环来提取值吗?当然可以,但这将改变为客户机
对象和可能的构造函数构造参数的方式。我正在阅读这个示例[link](),我认为我们可以使用for(int I=0;I
Client client = new Client(
clientName,
address,
city,
country,
homePhone,
officePhone,
cellPhone);
public class Client{
private String ClientName;
private Address address;
private List<String> PhoneNumbers;
public Client() {
this.PhoneNumbers = new ArrayList<String>();
}
public Client(String clientName, String address, String city, String country, String homePhone, String officePhone, String cellPhone) {
this();
ClientName = clientName;
address = new Address(...); // No idea of the parameters for this...
AddPhoneNumber(homePhone);
AddPhoneNumber(officePhone);
AddPhoneNumber(cellPhone);
}