Scala中新的Java类:采用类型参数

时间:2018-10-30 18:27:47

标签: java scala generics

有一个班级:

public class DeserializerHelper<T> extends AbstractSchemaHelper {
    public DeserializerHelper(Map<String, Object> config, Class<T> messageClass) {
        this(config, messageClass, null);
    }
}

我正在尝试在Scala中对其进行更新:

val decoder = new DeserializerHelper(config, classOf[GenericRecord])

但是我得到了Type DeserializerHelper takes type parameters

[ERROR]  found   : scala.collection.immutable.Map[String,Object]
[ERROR]  required: java.util.Map[String,Object]

如何解决此问题?谢谢

1 个答案:

答案 0 :(得分:1)

很显然,您尝试将其错误地放入Map中。 Scala的scala.collection.immutable.Map和Java的java.util.Map无关。这在这里工作正常:

Java:

public class DeserializerHelper<T> {
  public DeserializerHelper(java.util.Map<String, Object> conf, Class<T> msg){}
}

斯卡拉:

object newDeserializerHelper {
  def main(args: Array[String]): Unit = {
    val config = new java.util.HashMap[String, AnyRef]
    val decoder = new DeserializerHelper(config, classOf[String])
    println("compiles...")
  }
}

如果您使用javac编译前者,而使用scalac编译后者,那么一切都会正常进行,而不会出现错误或警告。

或者,在Scala一侧使用JavaConverters