gpt4 book ai didi

java - 安全地获取 java.lang.reflect.Method

转载 作者:行者123 更新时间:2023-12-02 08:56:12 26 4
gpt4 key购买 nike

类似的接口(interface)用于事件系统作为“监听器”

interface Updatable {
void update();
}

事件(→所有“监听”方法)由调用

spot(Method, Object... event);

实现。 获取“监听器”的java.lang.reflect.Method,如Updatable<中的update/

尝试。一种选择是使用反射(不安全)来找出要调用的方法

用法。在“监听器”接口(interface)中为每个方法创建一个常量,并将其用作参数

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 中使用将被编译为匿名内部类的 lambda。

Listener listenerMethod = new Listener() {
@Override
public void onEvent() {
updatable.update();
}
});
// anywhere, or in that "spot" method:
listenerMethod.onEvent();

用retrolambda就可以了

Listener listenerMethod = () -> updatable.update();

或类似的东西,具体取决于您的系统的外观。

关于java - 安全地获取 java.lang.reflect.Method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60476511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com