2017-02-28 58 views
0

爭取用方法的參數我想保存傳遞給方法的參數的值和類型。試圖用值

這是我正在做的一個更大項目的要求。所以,現在我需要按照它們在方法簽名中聲明的順序保存參數的值和類型,就在方法體的第一行。但是,我不會知道參數的數量。 因此,我正在尋找一種JAVA技術,將其所有方法參數與其相應的值進行比較。

參數的數量可能非常大,參數的名稱將不可知。

如果這不能直接發生,任何有關如何做到這一點的建議將會有所幫助。

public void stay(String temp1, int temp2, double temp3){ 

    //**--code to save the values of temp1, temp2, temp3 somehow--** 

    //method body that will change the value of parameters 
} 

EDIT 1: 上面提到的方法stay可以是任何事物,我不能明確地改變其代碼。我正在使用工具在方法主體中添加幾行代碼。這樣,我想在方法主體中添加一定的代碼段(邏輯上在開頭),它保存了參數的值。可以使用JSON格式進行保存。他們的類型可以通過使用javassist來知道。但瓶頸是要知道參數的值。

換個角度來看: 如果你想將一個方法的參數值存儲在一個列表中(這是在方法中聲明的),你會做什麼?由於參數的數量可能很大,我們不能真正對過程進行硬編碼。 謝謝。

+1

你是指「保存」還是「登記」的意思?你能不能把它們存儲在類級變量中? –

+0

我想在參數的值在方法體中被更改之前保存它們的值。我想將參數的值存儲在列表中,因此,如果我想在將來某個時候重新調用該方法,我知道指定順序的參數類型及其保存的值,我可以調用該方法而不需要在調用方法的地方到達該程序。即使將它們存儲在類級變量中,我也必須知道參數的數量以及它們的名稱。 我讓自己清楚了嗎? – Gautam

+0

你怎麼會不知道params的數量是多少,因爲一個方法的params的數量和類型是在編譯時設置的?那麼作爲參數傳遞的對象呢?你需要將它們保存在原始狀態嗎? –

回答

0

我不確定你的問題,但我想我有一個答案給你。

你想調用一個未知類型參數的函數嗎?

實現如下類:

public class SomeClass { 
    public void someFuntion(Object... objects) 
    { 
     for (int i = 0; i < objects.length; i++) { 
      Object object = objects[i]; 
      if(object != null) 
       System.out.println("Argument " + i + ": " + object.toString() + " (" + object.getClass().getSimpleName() + ")"); 
      else 
       System.out.println("Argument " + i + ": null"); 
     } 
    } 
} 

然後,調用這個類有:

SomeClass someClass = new SomeClass(); 
someClass.someFuntion("test", 8, new SomeClass()); 

輸出將是:

參數0:測試(字符串)

參數1:8(整數)

參數2:[email protected](SomeClass的)

希望它可以幫助你!例如,如果要將結果序列化爲JSON結構,則可以將其存儲爲JSON數組。例如,如果要將結果序列化爲JSON結構,則可以將其存儲爲JSON數組。

EDIT2:或更換您的住宿方法:

public void stay(Object... objects) 

和您的住宿方法的參數可在對象留法中陣列。

+0

這是我想要達到的地方。我想到了類似的步驟。然而,我想要的是: 'someClass.someFuntion(「test」,8,new SomeClass());' 這應該與我指定的方法參數 'someClass.someFuntion(temp1,temp2,temp3) ' 其中temp1,temp2,temp3是'stay'方法的參數。 – Gautam

+0

謝謝你表現出耐心。然而,這個限制(在評論中也提到了),我不能改變'stay'的代碼。我試圖讓問題更清楚,善意地通過一次,我希望它有幫助。 – Gautam

+0

您是否在**您的**(可編輯)代碼中調用了_stay_方法?如果是,只需在調用方法之前存儲參數。否則,請查看[Java反射文檔](http://docs.oracle.com/javase/tutorial/reflect/index.html)。 –