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

时间:2015-11-01 12:58:01

标签: java scala scala-java-interop

我有这个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 [字符串,对象]]; [错误]方法   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
  }
}
  

但这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

我无法重现您的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
  }
}

答案 1 :(得分:1)

您还需要将safe-paste转换为Java Map,并且有更好的方法来提供值类型:

Map