通過Reflect調用可變參數方法

JDK5之後,java的方法定義多了一個可變參數(varargs),在某些場合下還是比較方便的。

但是,在通過反射(reflect)調用時,就遇到了一些問題。

主要體現在兩個方面:

1、如何根據方法名及參數類型精確地從一個Class中獲取Method實例?(參數類型是什麼?怎麼構造?)

2、invoke調用時的Args如何構造?

Google了一下,做了一個小例子。

 

另外,還有一個相關的技巧。考慮這個需求:

給定一個字符串,描述了一個方法調用過程,比如:

leo.language.VarargsTest#test#java.lang.String#java.lang.String#hi there#leo

或者

leo.language.AnotherTest#execute#java.lang.Integer#java.lang.String#25#leo

如何根據這些字符串重新執行對應的方法?

肯定是可以通過一個統一的工具來實現的,實現時,重點依然是在上面的兩個方面,如何構造method的parameter type和argument value。

對於問題一, 可以考慮:

List<Class> clazz = new ArrayList<Class>();

clazz.add(...);

xxx.class.getMethod("methodName", clazz.getClass());

 

問題二比較簡單,就不說了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章