[英]get java.lang.reflect.Method safely
類似的interface
用於事件系統作為“偵聽器”
interface Updatable {
void update();
}
事件(→ 所有“監聽”方法)由
spot(Method, Object... event);
達到。 獲取java.lang.reflect.Method
of "listeners" like update
in Updatable
。
試圖。 一種選擇是使用反射(不安全)來找出要調用的Method
用法。 為“偵聽器”接口中的每個方法創建一個常量並將其用作參數
interface Updatable {
void update();
Method UPDATE = method(Updatable.class, "update");
}
//anywhere
spot(UPDATE);
使用這個 util 函數
static public @Nullable Method method(Class<?> of, String name, Class... params) {
try {
return of.getDeclaredMethod(name, params);
}
catch(Exception e) {/*...*/}
}
問題。 有沒有
在 (< 8) java 中獲取reflect.Method
的方法?
您可以在 java 7 中使用普通的函數類來執行此操作,它不漂亮但工作正常,如果您想讓它更漂亮,您可以使用類似https://github.com/luontola/retrolambda 的東西,這將允許您在 java 7 中使用 lambdas 將被編譯為匿名內部類。
Listener listenerMethod = new Listener() {
@Override
public void onEvent() {
updatable.update();
}
});
// anywhere, or in that "spot" method:
listenerMethod.onEvent();
和retrolambda只是
Listener listenerMethod = () -> updatable.update();
或類似的東西,取決於您的系統的外觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.