Scala与Java的互操作,用Object重写方法



我有这个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
  }
}

最新更新