java的invoke與getMethod方法用法


和listener一起使用舉例:
需要在控件中監聽某個動作:比如button點擊,畫面滾動等

1.為控件定義一個屬性:屬性綁定一個方法

xxxProperty ="onPropertyXxxxFunc”

2.首先自定義一個Listener

// 在控件構造函數中獲得控件屬性的值xxxPropertyValue
// 將該屬性作為參數傳遞給自定義的Listener
new xxxListener(this, xxxPropertyValue)

3.類似與Android原生的Listener,設計一個interface

public interface OnXxxxListener {
        void onXXXSignalFunc(需要用的參數列表);
}

4.該xxxListener實現OnXxxxListener的接口

// 在構造中拿到屬性中綁定的方法"onPropertyXxxxFunc"
context.getClass().getMethod(xxxPropertyValue,參數類型……)
//重寫OnXxxxListener中onXXXSignalFunc方法
上面拿到的方法調用invoke,觸發該方法onPropertyXxxxFunc

5.在畫面中實裝onPropertyXxxxFunc

6.調用onXXXSignalFunc方法:在接收畫面滾動信號,down,等信號時調用。調用onXXXSignalFunc方法,會調用invoke,觸發onPropertyXxxxFunc,畫面處理某些邏輯

Method getMethod(String name,Class...parameterTypes)

name: method的名稱
parameterTypes:method的參數類型的列表(參數順序需按聲明method時的參數列表排列)
返回:符合method名稱和參數的method對象
拋出錯誤:NoSuchMethodException (沒有找到所要查詢的Method對象或Method名稱為“<init>”或“<clinit>”)
		  NullPointerException (所要查詢的Method對象的名稱為null)
		  SecurityException(調用的類或其父類沒有調用權限)

invoke方法

作用:調用包裝在當前Method對象中的方法。
原型:Object invoke(Object obj,Object...args)
參數解釋:obj:實例化后的對象
                  args:用於方法調用的參數
返回:根據obj和args調用的方法的返回值
拋出錯誤:IllegalAccessException(Method對象強制Java語言執行控制或無權訪問obj對象)
		  IllegalArgumentException(方法是實例化方法,而指定需要調用的對象並不是實例化后的類或接口)

一個完整的例子:

https://www.sczyh30.com/posts/Java/java-reflection-1/
https://www.sczyh30.com/posts/Java/java-reflection-2/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM