2013-01-17 66 views
2

我使用下面的代碼來獲取方法輸入參數,但我得到了錯誤的參數 例如我爲了設置薪水我想獲得類型(雙)和名稱(工資)。 我在這裏想念什麼?獲取方法輸出參數

public void setSalery(double salery) { 
    this.salery = salery; 
    } 

這是代碼

for (Method method : classHandle.getMethods()) { 


      Class<?>[] parameterTypes = method.getParameterTypes(); 

      for (Class<?> class1 : parameterTypes) { 

       Field[] declaredFields = class1.getDeclaredFields(); 
       for (Field field : declaredFields) { 
        System.out.println(field.getName()); 


      } 
+0

您目前正在打印出*字段*參數類型。我不能立即找到任何方法,將給你的參數名稱... –

+0

那麼,你要求什麼,我幾個月前遇到過。但我找不到任何方法來獲取參數的名稱。可能是因爲它們不是作爲編譯的類文件的一部分存儲的。我認爲可能有某種方式,比如以某種方式註釋這個類來告訴它存儲名字,但是我找不到一個名字。 –

回答

3

您可以檢索參數類型但不是參數。除了在此方法中對你不透明的方法之外,它們是沒有意義的。 getDeclaredFields()返回類型中的字段,而不是參數名稱。

要調用該方法(使用你的例子),假設

MyBean b = new MyBean(); // contains method setSalary(double salary) 
Method m = ...   // a reference to a Method object for MyBean#setSalary(double salary) 
double newSalary = ...; 

然後做

m.invoke(b, new Double(newSalary)); 
+0

其實我想在最後找到所有的Set方法併發送它們參數,有沒有辦法做到這一點?我的secnario是通過字符串獲取方法名並找到所有的set方法,並將它們發送給相應的數據。 –

+0

爲此,您不需要參數名稱,只需要它的類型。當你調用該方法時(使用'Method#invoke(Object,Object ...)')參數是按位置而不是按名稱匹配的。 –

+0

你能舉一些例子嗎? –