类似的接口(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) {/*...*/}
}
问题。有吗
- 更安全
- 更简单
在 (<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/