簡體   English   中英

使用Varargs,我可以根據變量名稱為變量賦值嗎?

[英]Using Varargs, can I assign values to variables based on the variable name?

我試圖將一個可變數量的參數傳遞給構造函數,因為並不是所有的值都是必需的,並且空值是可以的。 我可以這樣做,以便我可以按任何順序傳遞變量,並讓它們正確地分配給類中相應的變量嗎?

在我的例子中,很少有注意事項是類中的變量是序列化的; 值可以是String,Integer,boolean或Date; 並且傳遞給構造函數的值將始終與其對應的類值匹配(如果類中的值是Integer,則總是為該值傳入Integer,而不是String.parseInt(),例如)

Class Foo {
  @SerializedName("id")
  private Integer id;

  @SerializeName("name")
  private String name;

  @SerializedName("isFoo")
  private Date isFoo;

  public Foo (Object... args){
  }
}

在構造函數中,我希望能夠詢問對象名稱是否與類中的變量匹配,以將其分配給該變量。 因此,如果傳遞的Object之一是一個名為id的Integer,有沒有辦法將它與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

我認為這可以通過Reflection解決,但我不確定如何。 任何幫助都會很棒。

我在下面回答你的實際問題,但回答問題的潛在願望,你可能正在尋找Builder模式:

Foo foo = new Foo.Builder().id(id).name(name).build();
Foo foo = new Foo.Builder().name(name).id(id).isFoo(isFoo).build();

它是最初的Gang of Four模式之一。

(在上面我將Builder作為一個嵌套類在Foo ,因為構建器類和它構建的東西往往是密切相關的。但這不是必需的,它只是它完成的一種方式。)


...我可以根據變量名稱為變量賦值嗎?

不會。 變量不會傳遞給您的方法。 從它們讀取變量中包含的 ,並將該值傳遞給您的方法。 當它到達你的方法時,沒有任何連接回到值來自的變量(事實上,它來自變量)。

在您的具體示例中,由於它們中的每一個都具有不同的類型,您可以檢查args每個條目以查看其類型是什么並從中起作用,但這將是相當奇怪的,我不會推薦它。

強調我不推薦它 ,看起來像:

for (Object arg : args) {
    if (arg instanceof Integer) {
        this.id = (Integer)arg;
    } else if (arg instanceof String) {
        this.name = (String)arg;
    } else if (arg instanceof Date) {
        this.isFoo = (Date)arg;
    }
}

但同樣,我不推薦它,如果我在代碼審查中遇到它,我想要一個非常非常好的理由 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM