我想傳遞一個可變數量的參數到一個構造函數中,因爲並不是所有的值都是必需的,而且空值是可以的。我可以這樣做,以便我可以按任何順序傳遞變量,並讓它們正確地分配給類中相應的變量。使用可變參數,我可以根據變量名稱爲變量賦值嗎?
在我的情況下,很少有值得注意的是類中的變量是序列化的;值可以是字符串,整數,布爾值或日期;並且傳遞給構造函數的值將始終與其相應的類值匹配(如果類中的值是整數,則將始終傳入整數以獲取該值,而不是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