новый класс Java в Scala: принимает параметры типа - PullRequest
0 голосов
/ 30 октября 2018

Есть класс:

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 голосов
/ 30 октября 2018

Видимо, вы пытались накормить его неправильным видом 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){}
}

Scala:

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, то все будет работать без ошибок или предупреждений.

Либо используйте JavaConverters на стороне Скалы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...