La implementación de una interfaz de Java en Scala resulta en un mapa de tipos incompatible.
Tengo una interfaz de Java que quiero implementar en Scala. La interfaz contiene la siguiente declaración de método:
List<><string, object="">> xyz(Map<string, object=""> var1, Map<string, object=""> var2);
Mi implementación en Scala 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 anulación xyz en la interfaz ITester de tipo (x$1: java.util.Map[String,Object], x$2: java.util.Map[String,Object]) java.util.List[java.util.Map[String,Object]] tiene un tipo incompatible. El método testComponent tiene un tipo incompatible.
No sé exactamente cuál es el problema.</string,></string,></string,>
davy.ai
El problema es que la implementación del método
testComponent
en Scala no es compatible con la declaración del método en la interfaz JavaITester
. La firma del método en la interfaz especifica que el método debe retornar unaList<><string, object="">>
, pero la implementación en Scala está retornando unautil.List[Map[String, AnyRef]]
. Los tipos genéricos utilizados en las declaraciones deList
yMap
no son los mismos en ambos casos.Para hacer la implementación compatible, se debe cambiar la declaración de la variable
list
a:Esto asegura que la implementación retorne los tipos genéricos apropiados especificados en la declaración del método de la interfaz.</string,>