2016-02-04 50 views
0

我想創建一個方法,該方法可以具有任意數量的參數和任何數據類型的任何方法。如何在Java中調用任何具有任意數量的參數和任何數據類型的方法

例如,我想打電話給下面的所有方法動態 無效方法1(INT X,int y)對 無效方法2(INT X,y字符串) 無效方法3(浮法X,大Y,字符串Z)


我使用反射來做到這一點。現在我想知道如何在調用這個動態方法的時候向這些方法傳遞參數。 我做多遠....

MyClass myClass = new MyClass(); 
    Class<?> c = myclass.getClass(); 
    Method[] m = c.getMethods(); 
    int i = 0; 
    Object [] obj; // obj contains values to be passed 
    for(Method method : m) 
    { 
     if("methodX".equals(method.getName())) 
     { 
      break; 
     } 
     i++; 
    } 
    Method myMethod = m[i]; 
    myMethod.invoke(myClass, obj); //this is not working 

我如何可以調用myMethod的?

在調用方法,我得到錯誤「的數量不正確的參數」

+1

可能的重複[如何將方法名稱作爲字符串時調用Java方法?](http://stackoverflow.com/questions/160970/how-do-i-invoke-a-java-method -when-given-the-method-name-as-a-string) – scana

+0

檢查方法名稱以及參數類型。 Apache Commons Lang有一些工具類可以幫助解決這個問題。儘管如此,IMO的主要問題是:_你想用這個做什麼?_ – Thomas

回答

0

嘗試myMethod.invoke(subject, obj)subject是要呼籲方法的實例。

+0

只有當方法只帶有一個Object []類型的參數時,傳遞'obj'纔會起作用。 – Thomas

+0

@Thomas - 它的工作原理,只是驗證了它......'invoke'有兩個參數 - 主體和參數數組。如果你想傳遞一個數組作爲參數,你需要創建一個數組,其中包含一個元素 - 一個數組......像這樣:'MyClass.class.getMethod(「a」,Object []。class) .invoke(subject,new Object [] {obj});' – Grogi

+0

謝謝..它工作:) – Kartik

相關問題