我想传递一个可变数量的参数到一个构造函数中,因为并不是所有的值都是必需的,而且空值是可以的。我可以这样做,以便我可以按任何顺序传递变量,并让它们正确地分配给类中相应的变量。使用可变参数,我可以根据变量名称为变量赋值吗?
在我的情况下,很少有值得注意的是类中的变量是序列化的;值可以是字符串,整数,布尔值或日期;并且传递给构造函数的值将始终与其相应的类值匹配(如果类中的值是整数,则将始终传入整数以获取该值,而不是String.parseInt(),例如)
Class Foo {
@SerializedName("id")
private Integer id;
@SerializeName("name")
private String name;
@SerializedName("isFoo")
private Date isFoo;
public Foo (Object... args){
}
}
在构造函数中,我希望能够询问任何对象名称是否与类中的某个变量相匹配,以便将其分配给该变量。所以如果一个Object的传递是一个Integer命名的id,有没有办法将它匹配到id?它应该能够在几种情况下匹配:
Foo foo = new Foo(id, name) //In this case, the bool would be null
Foo foo2 = new Foo(name, id, isFoo) //Here the Integer is second, but should still be able to be passed in correctly
我认为这可以通过反射来解决,但我不知道如何。任何帮助将是惊人的。
对象没有名称。只有变量有名字。调用者使用的变量名称对于被调用者而言是未知的(并且不相关)。所有你收到的是一个对象数组。将三个参数传递给您的构造函数,如果您希望其中一个参数为null,则传递null参数。 –
我认为你的目标是避免混乱的构造函数重载。我建议你将整个设计更改为[流利的构建器](https://en.wikipedia.org/wiki/Fluent_interface#Java)。 – Mena