Java 用于添加多个对象实例的Varargs

Java 用于添加多个对象实例的Varargs,java,variadic-functions,Java,Variadic Functions,我需要将我的PhoneNumber(号码、类型)的多个条目添加到我的主要Person(姓名、电话号码)对象中 我可以使用varargs来解决这个问题吗?或者有更好更有效的方法吗 我正试图按照以下方式进行工作: // number is a String and type is an enum PhoneNumber [] numbers = { new PhoneNumber(number , type), new PhoneNumber(number,type),

我需要将我的PhoneNumber(号码、类型)的多个条目添加到我的主要Person(姓名、电话号码)对象中

我可以使用varargs来解决这个问题吗?或者有更好更有效的方法吗

我正试图按照以下方式进行工作:

// number is a String and type is an enum

PhoneNumber [] numbers = {

    new PhoneNumber(number , type),
    new PhoneNumber(number,type),
    new PhoneNumber(number,type),

};

class Person(){

 Person(String name, PhoneNumber...numbers){

  // adding all the phonenumber objects to a list for each person.
}
我不确定这是否是实现它的正确方法,以及varargs是否是最佳选择

请告知。我知道这是一个基本的java问题,但没有找到更好的解决上述问题的方法。

这是一个不错的选择。 我还会添加另一个构造函数来处理集合


对于你的代码,我唯一不确定的是构造器是否应该处理电话号码,但既然你这样做,我想你有很好的理由。

要问的问题是:

如果一个人的电话号码为零,
Person
是否可以成为有效对象

如果是,请从构造函数中删除PhoneNumber并创建

Person::addPhone(PhoneNumber phone) { ... }
那么就不需要varadic构造函数了。如果一个
Person
没有数字就不能生效,那么传递一个大小可变的
PhoneNumber
s列表就更清楚了

我所说的“有效”是指对象在逻辑上是一致的。当然,您不能在没有电话号码的对象上发送Person::SendSMS,但我自己可能没有联系人号码,并且仍然是您要跟踪的有效实体。

我认为应该可以, 但是您不需要构造电话号码数组,因为在Person的构造函数中有varargs作为参数

您可以像这样直接调用Person的构造函数

Person p = new Person("JOHN", new PhoneNumber(numbertype.HOME, "123"),
                new PhoneNumber(numbertype.OFFICE, "456"), new PhoneNumber(
                        numbertype.OTHER, "789"));

我会简单地分开电话部分。像

class Person(){

 Person(String name){
 }

 void addPhoneNumbers(PhoneNumber...numbers) {
 }
}

我想知道,这些电话号码是从哪里来的?这些电话号码不太可能恰好出现在源代码中。我的意思是,你真的认为有人会在现实生活的代码中写一些像“亚瑟”,phoneNo1,phoneNo2,phoneNo3”这样的东西吗

我不这么认为(好吧,这样的代码可以出现在单元测试中,但不能出现在“真实”代码中)。这些信息将来自配置文件、用户的操作或网络流等。在任何情况下,电话号码都会一个接一个地出现,或者以某种方式收集。因此,我建议您使用一种方法
addPhoneNumber(PhoneNumber n)
,并选择一种方法
addAllPhoneNumbers(Collection ns)

我建议只在您需要时添加后一种方法,或者如果您确信它会有用的话。毕竟,这只是一种方便的方法


我认为varargs只有在开发人员可能手工编写方法调用时才有用(
String.format
是varargs的适当用法)。

+1另一个好的选择。课程越简单,测试就越容易。你回答的问题很酷,但我从来没有考虑过这样做。为什么?那么你有什么更好的建议呢?@Toy Ennis-我有一个和@jillka iyerthanks:)一样的问题,结果就是这样做的!当我想添加多个电话号码时似乎更好:)