您可以使用反射
樣品類
package com.google.util;
Class Maths
{
public Integer doubleIt(Integer a)
{
return a*2;
}
}
,並使用類似這個 -
步驟1: - 負載類具有給定輸入的字符串類型
Class<?> obj=Class.forName("Complete_ClassName_including_package");
//like:- Class obj=Class.forName("com.google.util.Maths");
第2步: - GET方法與給定的名稱和參數類型
Method method=obj.getMethod("NameOfMthodToInvoke", arguments);
//arguments need to be like- java.lang.Integer.class
//like:- Method method=obj.getMethod("doubleIt",java.lang.Integer.class);
第3步: - Invoke方法通過傳遞對象和論據的實例
Object obj2= method.invoke(obj.newInstance(), id);
//like :- method.invoke(obj.newInstance(), 45);
YOU CAN DO第2步也這樣
(當你不知道具體的方法在一個類中存在你通過循環法的陣列)
Method[] methods=obj.getMethods();
Method method=null;
for(int i=0;i<methods.length();i++)
{
if(method[1].getName().equals("methodNameWeAreExpecting"))
{
method=method[i];
}
}
檢查所有的方法,你只能這樣做,如果你知道在編譯時,該實例將是一個FooBar的 - 這那麼意味着你不需要首先使用反射! – Chii
@Chii:不是必需的。 FooBar可以是最常用的類型,從反射中獲得的類型是繼承的。這就是例如JDBC驅動程序的工作方式以及設計了多少插件體系結構。 – quosoo