和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/