【问题标题】:Scala - how to pass Callback to a methodScala - 如何将回调传递给方法
【发布时间】:2018-04-27 04:10:52
【问题描述】:

我正在尝试通过 Scala 公开 Java 方法(来自 Kafka:https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html)。
这是原始的 Java 方法:

public void commitAsync(OffsetCommitCallback callback)

如何将callback 传递给Scala 中的方法?我有类似的东西:

 def commitAsync() = {
    consumer.commitAsync(OffsetCommitCallback callback)
  }

谢谢。
奖励积分 - 看起来像一个测试,例如使用 MockitoSugar?

【问题讨论】:

    标签: java scala apache-kafka


    【解决方案1】:

    你可以这样处理回调:

    def commitAsync() = {
       consumer.commitAsync(new OffsetCommitCallback() {
          def onComplete(m: java.util.Map[TopicPartition, OffsetAndMetadata], e: Exception) {
            //...
          }
       })
    }
    

    OffsetCommitCallback 是一个interface,(与Scala 中的trait“相似”),因此您可以匿名初始化实例。

    Here's 是 Spark 项目中的一个快速幻影。

    【讨论】:

    • 谢谢.. 只是为了理解,我们正在创建 new OffsetCommitCallback 并调用 commitAsync 方法?
    • 它首先创建OffsetCommitCallback 的具体实例,然后将其作为回调传递给commitAsync
    • 谢谢.. 这样任何人都可以调用 Scala 方法 commitAsync,然后它会在 Complete - 回馈 TopicPartition 和 Offset... 有人会如何调用这个 Scala 方法? (使用哪些参数?)
    • 它在 commitAsync 方法的内部。无需直接从客户端调用。
    • 我需要为此创建一个“测试用例”。如何启动对此方法的“调用”以及如何对其进行测试?谢谢。
    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多