Implementacja interfejsu Java, Scala prowadzi do niekompatybilnej karcie typów

0

Pytanie

Mam interfejs Java, który chcę zrealizować w Scala. Interfejs zawiera następujące ogłoszenie metody:

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

Moja realizacja Scala jest taka:

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
  }

BŁĄD : przesłonięcie metody xyz w итестере objawów typu (x$1: java.util.Map[Wiersz,obiekt], x$2: java.util.Map[Wiersz,obiekt])java.util.Lista[java.util.Map[Wiersz,obiekt]]; metoda TestComponent ma niewłaściwy typ override def TestComponent( enter: java.util.Map[Wiersz, obiekt], metadane: java.util.Map[Wiersz, obiekt] )

Nie wiem, na czym dokładnie polega problem.

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

Najlepsza odpowiedź

3

Twoja definicja pojęcia testComponent ma typ Unit ponieważ jest określony za pomocą (starszego w najnowszych wersjach Scala) składnia procedury def name(args) { } (tj. nie = {). Najpierw przechodzi kompilacji, bo Scala pozwala rzucać wartość, gdy Unit oczekuje się (takie zachowanie może być po uzgodnieniu z pomocą opcji kompilatora -Ywarn-value-discard). Można rozwiązać ten problem, wskazując, że chcesz, aby ta metoda została wywołana w celu uzyskania wartości, włączając =.

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
}

Zwykle zaleca się wyraźnie wskazywać na typ wyniku metody publikowania. Jako alternatywa, to również powinno zadziałać:

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

W innych językach

Ta strona jest w innych językach

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