-1-反射獲取方法的方法
下面4個方法用於獲取class對應類所包含的方法:
(1)method getmethod(string name , class<?>… parametertypes)
:返回此class物件對應類的,帶指定形參列表的public方法。
(2)method getmethod():返回此class物件所表示的類的所有public方法。
(3)method getdeclaredmethod(string name , class<?>… parametertypes)
:返回此class對應類的,帶指定形參列表的方法,與方法的訪問許可權無關。
(4)method getdeclaredmethods():返回此class物件對應類的全部方法,與訪問許可權無關。
上面的getmethod()和getdeclaredmethod()方法中,都需要傳入多個型別為class
public
class person
private
void
setinfo(string name , int age)
}
呼叫下面的方法就可以執行上面person類中被保護的setinfo()方法(integer.type等同於int.class):
private void showperson()
catch (exception e)
}
例子2:
overflow中的action按鈕應不應該顯示圖示,是由menubuilder這個類的setoptionaliconsvisible方法來決定的,如果我們在overflow被展開的時候給這個方法傳入true,那麼裡面的每乙個action按鈕對應的圖示就都會顯示出來了。呼叫的方法當然仍然是用反**,**如下所示:
@override
public
boolean
onmenuopened(int featureid, menu menu)
catch (exception e) }}
return
super.onmenuopened(featureid, menu);
}
需要指出的menubuilder實現了menu介面。
-3-使用反射執行pulic例項方法的通用寫法
public object invokemethod(object owner, string methodname, object args) throws exception
method
method = ownerclass.getmethod
(methodname,argsclass);
return method.invoke
(owner, args);
}
-4-使用反射執行pulic靜態方法的通用寫法
public object invokestaticmethod(string classname, string methodname,
object args) throws exception
method
method = ownerclass.getmethod
(methodname,argsclass);
return method.invoke
(null, args);
}
基本的原理和例項3相同,不同點是最後一行,invoke的乙個引數是null,因為這是靜態方法,不需要借助例項執行。 反射專題1
1 首先,先解決乙個問題,完成乙個物件的拷貝。2 獲取class 型別的物件方法 1 通過getclass 方法,如 person類 reflection 類 輸出 可見某個型別的多個物件在共享乙個class型別物件。2 通過class.forname string name 方法,如 在原來per...
java反射 4 反射賦值
本篇介紹利用反射給物件賦值 方法1 獲得並使用預設構造器建立類的物件 並對物件賦值 這裡類用的是person類 屬性有 id name address 來做例子 public class person public void setid integer id public string getnam...
反射 4 Type反射
1 activator.createinstance type t 會動態呼叫類的public無參建構函式建立乙個物件,返回值就是建立的物件,如果類沒有無參建構函式就會報錯。2 應用 動態建立物件sayhello。介面宣告到單獨的專案中,避免迴圈引用。如下 using system using sy...