【发布时间】:2020-03-01 15:11:48
【问题描述】:
类似的interfaces 用于事件系统作为“监听器”
interface Updatable {
void update();
}
事件(→ 所有“监听”方法)由
调用spot(Method, Object... event);
要实现。 在Updatable 中获取update 之类的“听众”的java.lang.reflect.Method。
尝试。一个选项是使用反射(不安全)找出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) {/*...*/}
}
问题。有没有
- 更安全
- 更简单
在 (reflect.Methods 的方法?
【问题讨论】:
-
为什么不使用匿名内部类而不是 lambda 表达式?你的假设是正确的,这种使用反射很慢。
-
使用类似的东西:github.com/luontola/retrolambda
-
@Holger 你是对的,我删除了误导性的 java 8 代码!
-
实际上,我不明白您要解决的问题。你想达到什么目的?你谈论了很多关于如何你想做某事而不是你想要实现什么。这似乎是XY problem 的一个实例。我没有得到你关于接口和回调的简要解释。我认为MCVE 而不是一组不连贯的孤立代码 sn-ps 将有很大帮助。
-
只需使用普通的匿名类(或使用上面链接的此 retrolambda 的 lambda)并注册一个函数以在某处调用这些方法中的每一个,然后您就不需要任何反射
标签: java methods reflection java-7