java通過反射呼叫方法

2021-09-14 06:51:06 字數 838 閱讀 7916

業務中有個場景是這樣的,根據傳入不同的值生成不同的訊息體。這個時候如果用switch或ifelse的話那每一層**都很多,而且不利於維護。於是想到乙個方法,根據傳入的引數呼叫不同的方法(引數即方法),這樣便於維護也利於**的健壯性。**如下(示例):

//先獲取方法,type方法名,this.getclass()引數型別,如果是多個則為陣列

//需要注意兩點:1.如果方法名不正確的話會報錯2.如果方法為私有的話會報錯。都是nosuchmethodexception錯誤,提示找不到方法

//呼叫私有方法可以用method privatemethod = clazz.getdeclaredmethod();privatemethod.setaccessible(true);

method method = msgcustomtype.class.getmethod(type,this.getclass());

//再使用invoke()方法呼叫,第乙個引數初始化類,第二引數為傳參

//需要注意兩點:1.第乙個引數必須初始化或方法為static,第二個引數傳參型別必須正確,沒有傳參則不填,有傳參則為陣列

object msgcont = method.invoke(msgcustomtype.class.newinstance(),msgcustomtype);

反射的好處是通過反射可以獲取類的資訊,可以靈活的建立物件以及呼叫方法,極大的增強了**的靈活性。框架中也有很多地方用到了反射,例如各框架中讀取xml配置,例如spring中的註解。

利用反射需要注意以下三點:

1.效能第一 

2.安全限制

3.內部暴露

優缺點及用途可參考

unity通過反射呼叫方法

using system.reflection using system 1.load 命名空間名稱 gettype 命名空間.類名 type type classname.gettype 需要呼叫的方法名稱 methodinfo method type.getmethod methodfunc 3...

C 通過反射呼叫方法

用反射呼叫方法 常用於軟體架構中 假如你定義好了基類和介面,其他人使用基類派生出新的方法,你在不知道有多少類會使用此基類派生,但是你需要呼叫所有的派生類的方法時,就可以這樣,直接遍歷相同命名空間中的由基類派生的所有類,然後例項化所有類,呼叫所有方法 using system using system...

通過反射呼叫介面的方法

之前使用公司的框架,業務使用到的一般就是action serviceimpl business模式,其中業務邏輯主要寫在businsess中,這個裡面有一段和常用但是一直不知道原理是什麼,就是下面這段 user user this.getdao getbean userdao.class selec...