La implementación de interfaz Java en la Scala de resultados en incompatible tipo de mapa

0

Pregunta

Tengo un interfaz Java que quiero implementar en la Scala. La interfaz contiene el método siguiente declaración:

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

Mi Scala aplicación es:

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
  }

ERROR : el método de reemplazo xyz en el rasgo de ITester de tipo (1$x: java.util.Mapa[String,Object], x$2: java.util.Mapa[String,Object])de java.util.Lista[java.util.Mapa[String,Object]]; método testComponent ha incompatible tipo reemplazar def testComponent( entrada: java.util.Mapa[String, Object], metadatos: java.util.Mapa[String, Object] )

No sé qué es exactamente el problema.

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

Mejor respuesta

3

Su definición de testComponent tiene el tipo Unit porque es definida mediante el (en desuso en las últimas versiones de Scala), sintaxis del procedimiento de def name(args) { } (es decir, no = {). Se pasa primero de la compilación debido a Scala permite un valor a ser desechados cuando Unit se prevé que el comportamiento puede ser una advertencia con la opción de compilador -Ywarn-value-discard). Puede resolver esto está explícito que desea que este método de valor incluyendo el =.

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
}

Es generalmente una buena idea para ser explícito acerca del tipo de resultado de un método público. Alternativamente, también debería funcionar:

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

En otros idiomas

Esta página está en otros idiomas

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