我有这个Java接口
public interface IFoo {
List<Map<String, Object>> getMaps() throws Exception;
}
如何覆盖此方法我试过:
import scala.collection.JavaConverters._
class Foo extends IFoo{
override def getMaps: util.List[util.Map[String,AnyRef]] = {
List(Map("A" -> "B")).asJava
}
}
但是我收到了这个编译错误
重写类型的trait IFoo中的方法getMaps()java.util.List[java.util.Map[String,Object]];[ERROR]方法getMaps具有不兼容的类型
我可以做一些类似的事情:
import scala.collection.JavaConverters._
class Foo extends IFoo{
override def getMaps: util.List[util.Map[String,AnyRef]] = {
List(Map("A" -> "B".asInstanceOf[AnyRef)).asJava
}
}
但这是正确的方式吗?
您还需要将Map
转换为Java Map
,有一种更好的方法可以提供值类型:
List(Map[String, AnyRef]("A" -> "B").asJava).asJava
我无法重现您的overriding incompatible type
错误。但我在方法中得到了type mismatch
,这个问题在这个答案中得到了解决。
class Foo extends IFoo{
override def getMaps: util.List[util.Map[String,AnyRef]] = {
List(Map("A" -> "B").mapValues(x => x: AnyRef).asJava).asJava
}
}