2015-06-16 113 views
0

從我個人理解,方法可以動態如果提供的參數類型的的方法名稱和兩個列表(見下文)調用。但是,有沒有辦法動態地調用方法,而不用指定參數類型,或者提供un/bound的泛型類型?如果是的話,解釋/例子將不勝感激。謝謝。動態方法調用

Class<?>[] paramTypes = {String.class}; 
Method m = original.getClass().getMethod(methodName, paramTypes); 
m.invoke(original, value); 
+3

你可以用'getDeclaredMethods'所有聲明的方法,但是如果你不知道的參數提供(是嗎?),你將如何調用該方法? –

+0

@Sotirios Delimanolis:OP知道*值*,因此可以確定參數類型,但這是一個額外的操作。此外,*參數*類型不一定是*參數*類型,例如你的參數可能是一個String,但目標方法可能接受任何Object。 – Holger

回答

0

有從Java 1.4,Statement和豆類包裝Expression的解決方案。爲了您的調用,而不是評估返回值,你可以使用

new Statement(original, methodName, new Object[]{value}).execute(); 

,因爲它必須找出比直接反映使用甚至更多,你可以期望的性能,甚至比直接使用反射更糟。

此外,它被限制爲public的API。