Implementarea interfeței Java în Scala rezultate în incompatibile tip hartă

0

Problema

Am un Java interface că vreau să pună în aplicare în Scala. Interfața conține următoarea metodă-declarație:

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

Mi Scala de implementare este:

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
  }

EROARE : metodă de înlocuire xyz în trăsătură ITester de tip (x$1: java.util.Harta[String,Object], x$2: java.util.Harta[String,Object])java.util.Lista[java.util.Harta[String,Object]]; metoda testComponent are incompatibile tip suprascrie def testComponent( intrare: java.util.Harta[String, Object], metadate: java.util.Harta[String, Object] )

Nu stiu exact ce problema este.

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

Cel mai bun răspuns

3

Definiția ta testComponent a tip Unit deoarece este definită prin (depreciată în versiunile recente de Scala) procedura de sintaxa def name(args) { } (de exemplu, nu = {). Primul trece de compilare deoarece Scala permite o valoare pentru a fi eliminate atunci când Unit este de așteptat (acest comportament poate fi făcut un avertisment cu compilatorul opțiune -Ywarn-value-discard). Puteți rezolva acest lucru prin a fi explicit că doriți ca această metodă să fie numit de valoare prin includerea =.

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
}

În general, este o idee bună să fie explicit despre tipul de rezultat de o metodă publică. Alternativ, acest lucru ar trebui să funcționeze, de asemenea:

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

În alte limbi

Această pagină este în alte limbi

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