繁体   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