【问题标题】:How to implement Java Interface (for Kafka) in Scala?如何在 Scala 中实现 Java 接口(用于 Kafka)?
【发布时间】:2018-04-29 23:38:25
【问题描述】:

如何使用Scala实现ConsumerRebalanceListener

public class SaveOffsetsOnRebalance implements ConsumerRebalanceListener {
}

在订阅主题时,新制作的 Scala 重新平衡监听器的例子是什么?

尝试学习并全神贯注于在 Scala 中实现 Java 方法/接口。

谢谢。

【问题讨论】:

    标签: java scala apache-kafka


    【解决方案1】:

    你可以直接扩展接口

    class MyListener extends ConsumerRebalanceListener {
         ...
     }
    

    API 文档中的示例如下所示:

      class SaveOffsetsOnRebalance(consumer: Consumer[_, _] ) extends ConsumerRebalanceListener {
    
       def onPartitionsRevoked(partitions: Collection[TopicPartition]): Unit = {
           // save the offsets in an external store using some custom code not described
       partitions.toScala.forEach(
             saveOffsetInExternalStore(consumer.position(partition))
       )
       }
    
       def onPartitionsAssigned(partitions: Collection[TopicPartition]): Unit = {
           // read the offsets from an external store using some custom code not described here
           partitions.forEach(
              consumer.seek(partition, readOffsetFromExternalStore(partition)))
       }
     }
    

    只需添加适当的导入

    【讨论】:

    • Shiash (consumer Consumer[_, _] ) 的参数是什么?
    • 谢谢。那么传递的类型是ConsumerConsumer 是一个类吗?这部分看起来像一张地图[_, _]。我只是不熟悉这种表示法(_ 是否意味着 any?)以及在哪里寻找 Consumer 以查看该类型?谢谢..
    • Consumer 类型取自 api 文档示例。我从那里获取的所有代码 sn-p 都刚刚翻译成 Scala 语法。 Scala 中的 [_, _] 等价于 java , ?>,基本上是具有 2 个类型参数的泛型,您不必关心它们是什么
    【解决方案2】:

    Scala 中有一些特性对应于 Java 中的接口。 Scala trait 在内部被转换为 Java 接口。就像我们在 Java 中实现接口一样,我们在 Scala 中扩展特征也是如此。所以你只需要像扩展 Scala trait 一样扩展 Java 接口,因为在底层它们是相同的。

    class SaveOffsetsOnRebalance extends ConsumerRebalanceListener {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 2011-09-26
      • 2016-12-10
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多