【问题标题】:Scala: class takes type parameters when passing a class to another class?Scala:将一个类传递给另一个类时,类接受类型参数?
【发布时间】:2015-07-10 17:29:34
【问题描述】:

我正在尝试创建一个可运行的类以与线程一起使用。该类的目的是采用KafkaStream 并将一个函数应用于通过流的每条消息,但是当我尝试将流传递给该类时,我收到以下编译器错误:“scala:45: class KafkaStream接受类型参数”。

class streamOperator extends Runnable {
  def run(f: String => Any, stream: KafkaStream) {
    for (messageAndTopic <- stream) {
      var message = new String(messageAndTopic.message)
      f(message)
    }
  }
}

这是课程。这个问题一定与如何将参数传递给 Scala 中的类有关,但我对 Scala 还是很陌生。

另外是否可以使函数可运行?我认为传递给函数比传递给类更容易。

【问题讨论】:

  • 不像 Java Scala 没有原始类型,所以你必须在 stream: KafkaStream[?] 中使用 some 类型参数。 ? 应该是什么取决于您对 messageAndTopic.message 的期望。
  • @TravisBrown 啊,好吧,我想是这样的。 messageAndTopic 是一个数组 [Bytes],但是当我尝试 KafkaStream[Array[Byte]] 时,我现在得到“kafka.consumer.KafkaStream 的参数数量错误,应该是 1”。我是否需要提供应该从 KafkaStream 输出的内容,或者应该输入的内容?
  • 或者让调用者提供类型:def run[T](f: String =&gt; Any, stream: KafkaStream[T])

标签: scala runnable apache-kafka kafka-consumer-api


【解决方案1】:

按照 cmets 中的建议,解决方案是通过 KafkaStream[?]。在这种情况下?是KafkaStream[Array[Byte], Array[Byte]]。我认为KafkaStream[T] 也可以,但我认为如果可能的话最好传递实际类型。

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 2012-10-18
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多