gpt4 book ai didi

用于调用方法的 Java 注解

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

我在使用注释来调用注释所属的方法时遇到了一些麻烦......我将举一个例子:

class MyEventHandlers {

@handler(id=“1”)
public doSomething() {
...
}

@handler(id=“2”)
public doSomethingElse() {
...
}

}

....

subscribe(“event1”, new MyEventHandlers, “1”);
//or maybe a better way to do this?!

....

//later, when I detect ‘event1’ I can process the required handler:
process(new MyEventHandlers, “1”)

我的想法是,我想要一种方法来定义事件的处理程序,然后将事件链接到处理程序。 (现在考虑一个事件是一些字符串文字)。

总而言之,我不确定做我想做的事情的最佳风格是什么。以上是我目前的想法。如果有更好的风格来实现这一点,请提出建议。

最佳答案

我怀疑您想要做的事情可以使用 AOP 框架更轻松地实现。

但是既然你可能想自己做:

性能的关键是仅在设置期间使用反射。因此,在订阅时,您创建一个处理程序描述符并将其添加到该事件的监听器中。处理程序描述符基本上是 java.lang.reflect.Method有一个调用它的实例,以及一些关于如何获取事件数据的知识,即该方法采用什么参数。

这样就可以实现事件触发

for (HandlerDescriptor desc : subscriptionMap.get(event)) {
desc.trigger(event);
}

,应该很快。您可以为获取事件信息的处理程序使用不同的 HandlerDescriptors,...

您还可以通过在类级别缓存 java.lang.reflect.Method(通过处理程序 id 键)来加快 subscribe 本身的速度。这样,反射仅在订阅类的方法时使用,以前没有见过。

我在这里不讨论的内容(提示:它是 API 风格)

  • 如何命名注释
  • 如何获取上下文/事件数据,您可以查看 JAX-RS 。基本上,您还将在设置时解析该信息,例如通过查看参数类型,这样您就不需要在 .trigger() 时调度它。
  • 是否订阅/取消订阅或从订阅返回取消订阅者。这是古老的事件系统 API 风格问题。

关于用于调用方法的 Java 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6833024/

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