Реализация интерфейса Java в Scala приводит к несовместимой карте типов

0

Вопрос

У меня есть интерфейс Java, который я хочу реализовать в Scala. Интерфейс содержит следующее объявление метода:

 List<Map<String, Object>> xyz(Map<String, Object> var1, Map<String, Object> var2);

Моя реализация Scala такова:

override def testComponent( input: java.util.Map[String, Object], metadata: java.util.Map[String, Object] )
  {

    val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]

     return list
  }

ОШИБКА : переопределение метода xyz в итестере признаков типа (x$1: java.util.Map[Строка,объект], x$2: java.util.Map[Строка,объект])java.util.Список[java.util.Map[Строка,объект]]; метод TestComponent имеет несовместимый тип переопределения def TestComponent( ввод: java.util.Map[Строка, объект], метаданные: java.util.Map[Строка, объект] )

Я не знаю, в чем именно заключается проблема.

interface java scala scala-java-interop
2021-11-20 13:48:55
1

Лучший ответ

3

Ваше определение понятия testComponent имеет тип Unit поскольку он определен с использованием (устаревшего в последних версиях Scala) синтаксиса процедуры def name(args) { } (т. е. нет = {). Сначала он проходит компиляцию, потому что Scala позволяет отбрасывать значение, когда Unit ожидается (такое поведение может быть предупреждено с помощью опции компилятора -Ywarn-value-discard). Вы можете решить эту проблему, четко указав, что хотите, чтобы этот метод вызывался для получения значения, включив =.

override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) = {
  val list: util.List[Map[String, AnyRef]] = new util.ArrayList[Map[String, AnyRef]]
  list  // return should be avoided in Scala: it's not necessary and can introduce some really subtle bugs
}

Обычно рекомендуется четко указывать тип результата общедоступного метода. В качестве альтернативы, это также должно сработать:

override def testComponent(input: java.util.Map[String, Object], metadata: java.util.Map[String, Object]) =
  new ArrayList[Map[String, AnyRef]]
2021-11-22 00:21:31

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................