在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);
    }