1. 程式人生 > >Method的invoke()方法的使用

Method的invoke()方法的使用

一、為什麼要用invoke方法

主要是為了類反射,這樣你可以在不知道具體的類的情況下,根據配置的字串去呼叫一個類的方法。在靈活程式設計的時候非常有用。

二、實現方法

public Object invoke(Object obj,Object... args)throws IllegalAccessException,IllegalArgumentException,InvocationTargetException
對帶有指定引數的指定物件呼叫由此 Method 物件表示的底層方法。個別引數被自動解包,以便與基本形參相匹配,基本引數和引用引數都隨需服從方法呼叫轉換。

如果底層方法是靜態的,那麼可以忽略指定的 obj

 引數。該引數可以為 null。

如果底層方法所需的形引數為 0,則所提供的 args 陣列長度可以為 0 或 null。 

如果底層方法是靜態的,並且尚未初始化宣告此方法的類,則會將其初始化。

如果方法正常完成,則將該方法返回的值返回給呼叫者;如果該值為基本型別,則首先適當地將其包裝在物件中。但是,如果該值的型別為一組基本型別,則陣列元素 被包裝在物件中;換句話說,將返回基本型別的陣列。如果底層方法返回型別為 void,則該呼叫返回 null。

obj - 從中呼叫底層方法的物件(簡單的說就是呼叫誰的方法用誰的物件)args - 用於方法呼叫的引數 舉例如下:
public class A {
	public void foo(String name){
		System.out.println("Hello, " + name);
	}
}

package com.deppon.tps.atom.analysts;

import java.lang.reflect.Method;

public class TestClassLoad {
	public static void main(String[] args) throws Exception {
		 Class<A> clz = A.class; 
		Object o = clz.newInstance();
		Method m = clz.getMethod("foo", String.class);
		for (int i = 0; i < 16; i++) {
			m.invoke(o, Integer.toString(i));
		}
	}
}