反射專題4

2021-07-25 04:08:05 字數 1821 閱讀 8469

-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...