java - 没有函数指针,除了接口(interface)之外,在 Java 中实现回调的推荐方法是什么?

标签 java design-patterns callback

我有几个类想要互相传递一些信息并稍后使用该信息(回调模式)进行回调。

在我的应用程序中,此机制有两个目的:

  • 计划/延迟执行
  • 涉及消息传递的异步执行

我的对象基本上互相说“当你完成 X 时,给我回电话并告诉我用 Z 做 Y(因为那时我会忘记它)” 。其中 X 可能只是等待正确的时间,但也与远程服务通信或调用本地函数。

现在,如果 Java 中有函数指针(或等效函数),我将实现一些“Job”类,其中包含一加上它所需的参数。例如,在 PHP 中,该结构必须存储类名、函数名和参数数组。在 C 中,它将是一个指向函数的指针,我必须使所有调用的参数具有相同的数字和类型。

在 Java 中,通常的方法是拥有一个由所有想要回调的类实现的接口(interface),如下所示:

public interface ICallable {
    public void call_me(Object data);
}

现在这对我不起作用,因为

  • 要回调的对象可能有一组不同的方法来接受调用
  • 调用者并不是决定应该进行什么调用的人

也许我的问题是我试图为各种回调建立一个通用的数据结构和调用过程,但原则上,这对我来说似乎是有意义的。

在 Java 中处理这种情况的良好设计模式是什么?

最佳答案

我想您会发现接口(interface)是最好的解决方案。我不明白你反对他们。如果接收者需要调用不同的方法,则让接口(interface)方法调用不同的方法。

如果您的接收器类需要有多个处理程序,您可以使用实现接口(interface)的匿名内部类,一个用于您需要的每种类型的处理程序。例如,如果发送方使用名为“ListenerInterface”的接口(interface),则您的接收方可能会定义一个实现 ListenerInterface 的匿名内部类并调用接收方方法“handlerFunction”。

   sender.addListener(new ListenerInterface()
   {
      public void callback(Object arg)
      {
         handlerFunction(arg);
      }
   });

关于java - 没有函数指针,除了接口(interface)之外,在 Java 中实现回调的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626669/

相关文章:

java - 将 SimpleDateFormat 年份转换为整数

c# - .NET 2.0等效于C#扩展方法

caching - LRU 缓存如何符合 CAP 定理?

javascript - 了解 Javascript 和 node.js 中的回调

javascript - 从回调中访问 `this`

javascript - 可以覆盖回调中使用的方法吗?

java - Jackson 2.1 多态反序列化 : How to populate type field on pojo?

java - 无法使用 SAF 检索自定义额外内容

java - Woocommerce API 获取所有产品

design-patterns - 命令设计模式使用