Implementare l'interfaccia Java in Scala risultati incompatibili tipo di mappa

0

Domanda

Ho una interfaccia Java che voglio realizzare in Scala. L'interfaccia contiene il metodo seguente dichiarazione:

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

La mia Scala di attuazione è:

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
  }

ERRORE : l'override del metodo xyz nel tratto ITester del tipo (x$1: java.util.Mappa[String,Object], x$2: java.util.Mappa[String,Object])java.util.Elenco[java.util.Mappa[String,Object]]; metodo testComponent è incompatibile tipo override def testComponent( ingresso: java.util.Mappa[String, Object], metadati: java.util.Mappa[String, Object] )

Non so esattamente di cosa si tratta.

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

Migliore risposta

3

La tua definizione di testComponent ha il tipo Unit perché è definita utilizzando la (deprecato nelle versioni più recenti di Scala) procedura di sintassi def name(args) { } (vale a dire di no = {). Si passa prima compilation perché la Scala permette un valore per essere scartati quando Unit è previsto (il comportamento può essere fatta una segnalazione con l'opzione del compilatore -Ywarn-value-discard). È possibile risolvere questo con esplicito, che si desidera che questo metodo di essere chiamati per valore includendo l' =.

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
}

E ' generalmente una buona idea per essere più espliciti circa il tipo del risultato di un metodo pubblico. In alternativa, questo dovrebbe funzionare:

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

In altre lingue

Questa pagina è in altre lingue

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