簡體   English   中英

安全地獲取 java.lang.reflect.Method

[英]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) {/*...*/}
}

問題。 有沒有

  1. 更安全
  2. 更簡單

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM