用“?”覆盖方法scala中的参数

时间:2016-05-18 04:44:39

标签: scala

我正在尝试在Scala中扩展以下java类

https://kafka.apache.org/082/javadoc/org/apache/kafka/common/serialization/Serializer.html#configure(java.util.Map,布尔值)

到目前为止,我编写的代码是

package com.abhi

import org.apache.kafka.common.serialization.Serializer

import scala.runtime.ObjectRef

class PersonSerializer extends Serializer[Person] {
  override def configure(configs: Map[String, ObjectRef], isKey: Boolean) : Unit = {

  }

  override def serialize(topic: String, p : Person) : Array[Byte] = {
    Array[Byte]()
  }
}

但是这给了我编译时错误method configure overrides nothing

我尝试过搜索,但由于“?”我无法弄清楚如何覆盖configure方法在java定义中

1 个答案:

答案 0 :(得分:2)

请注意,在Serializer界面中,您有一个java.util.Map,而不是scala.collection.Map。 您还需要定义close。 因此,您应该修复您的代码,如下所示:

class PersonSerializer extends Serializer[Person] {
  override def configure(configs: java.util.Map[String, _], isKey: Boolean) : Unit = {

  }

  override def serialize(topic: String, p : Person) : Array[Byte] = {
    Array[Byte]()
  }

  def close() {
    //do something
  }
}

请注意,无法定义更精确的类型来配置Map右参数,因为它是?在它的java定义中,因此我们应该接受java.util.Map,其值可以是任何值(在scala中为_ type)。