Vykonávacie Java rozhranie v Scala výsledky v nezlučiteľné typ mapa

0

Otázka

Mám Java rozhranie, ktoré chcem realizovať v Scala. Rozhranie obsahuje nasledujúce metódy-prehlásenie:

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

Môj Scala realizácie je:

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
  }

CHYBA : závažnými metóda xyz v rys ITester typu (x$1: java.util.Mapa[String,Objekt], x$2: java.util.Mapa[String,Objekt])java.util.Zoznam[java.util.Mapa[String,Objekt]]; metóda testComponent má nezlučiteľné typ prepísať def testComponent( príkon: java.util.Mapa[String, Objekt], metadáta: java.util.Mapa[String, Objekt] )

Neviem, čo presne je problém.

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

Najlepšiu odpoveď

3

Vaša definícia testComponent má typ Unit pretože je to definované pomocou (zavrhované v posledných verziách Scala) postup syntax def name(args) { } (t. j. nie = {). Obal prvýkrát prechádza zostavovanie pretože Scala umožňuje hodnotu, ktorú chcete vymazať, keď Unit očakáva sa, (že správanie môže byť varovanie, s kompilátor možnosť -Ywarn-value-discard). Môžete to vyriešiť tým, že je jednoznačné, že chcete, aby táto metóda sa nazýva pre hodnoty, vrátane =.

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
}

Vo všeobecnosti je dobré byť explicitne o výsledok typ verejnej metóda. Prípadne, to by malo fungovať:

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

V iných jazykoch

Táto stránka je v iných jazykoch

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