閱讀900 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java Reflection(五):方法

內容索引
獲取Method對象
方法參數以及返回類型
通過Method對象調用方法

使用Java反射你可以在運行期檢查一個方法的信息以及在運行期調用這個方法,通過使用java.lang.reflect.Method類就可以實現上述功能。在本節會帶你深入了解Method對象的信息。

獲取Method對象

可以通過Class對象獲取Method對象,如下例:

   Class aClass = ...//獲取Class對象
   Method[] methods = aClass.getMethods();

返回的Method對象數組包含了指定類中聲明為公有的(public)的所有變量集合。
如果你知道你要調用方法的具體參數類型,你就可以直接通過參數類型來獲取指定的方法,下麵這個例子中返回方法對象名稱是“doSomething”,他的方法參數是String類型:

   Class  aClass = ...//獲取Class對象
   Method method = aClass.getMethod("doSomething", new Class[]{String.class});

如果根據給定的方法名稱以及參數類型無法匹配到相應的方法,則會拋出NoSuchMethodException。
如果你想要獲取的方法沒有參數,那麼在調用getMethod()方法時第二個參數傳入null即可,就像這樣:

   Class  aClass = ...//獲取Class對象
   Method method = aClass.getMethod("doSomething", null);

方法參數以及返回類型

你可以獲取指定方法的方法參數是哪些:

   Method method = ... //獲取Class對象
   Class[] parameterTypes = method.getParameterTypes();

你可以獲取指定方法的返回類型:

   Method method = ... //獲取Class對象
   Class returnType = method.getReturnType();

通過Method對象調用方法

你可以通過如下方式來調用一個方法:

   //獲取一個方法名為doSomesthing,參數類型為String的方法
   Method method = MyObject.class.getMethod("doSomething", String.class);
   Object returnValue = method.invoke(null, "parameter-value1");

傳入的null參數是你要調用方法的對象,如果是一個靜態方法調用的話則可以用null代替指定對象作為invoke()的參數,在上麵這個例子中,如果doSomething不是靜態方法的話,你就要傳入有效的MyObject實例而不是null。
Method.invoke(Object target, Object … parameters)方法的第二個參數是一個可變參數列表,但是你必須要傳入與你要調用方法的形參一一對應的實參。就像上個例子那樣,方法需要String類型的參數,那我們必須要傳入一個字符串。

最後更新:2017-05-23 12:02:38

  上一篇:go  《GO並發編程實戰》—— WaitGroup
  下一篇:go  《GO並發編程實戰》—— 臨時對象池