Provádění Java rozhraní v Takových výsledků v nekompatibilní typ mapy

0

Otázka

Mám Java rozhraní, které chci realizovat v Scala. Rozhraní obsahuje následující metody-deklarace:

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

Můj Scala realizace 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 : převažující metoda xyz ve rys ITester typu (x,$1: java.util.Map[String,Object], x$2: java.util.Map[String,Object])java.util.Seznam[java.util.Map[String,Object]]; metoda testComponent má nekompatibilní typ přepsat def testComponent( vstup: java.util.Map[String, Object], metadata: java.util.Map[String, Object] )

Nevím, co přesně je problém.

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

Nejlepší odpověď

3

Vaše definice testComponent má typ Unit protože je definována pomocí (zastaralé v posledních verzích Scala) postup syntaxi def name(args) { } (tj. = {). To první kompilace projde, protože Scala umožňuje hodnotu, musí být zlikvidován, když Unit očekává se, (že chování může být varování s možnost kompilátoru -Ywarn-value-discard). Můžete vyřešit tím, že explicitní, že chcete tuto metodu, která se nazývá pro hodnotu tím, včetně =.

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
}

To je obecně dobrý nápad, aby bylo jasno o typu výsledku veřejné metody. Alternativně, tento by měl také pracovat:

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 jiných jazycích

Tato stránka je v jiných jazycích

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