【问题标题】:Scala interop with Java overriding method with ObjectScala 与 Java 覆盖方法与 Object 的互操作
【发布时间】:2015-11-01 12:58:01
【问题描述】:

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

但我收到此编译错误

在 IFoo 类型的 trait IFoo 中覆盖方法 getMaps ()java.util.List[java.util.Map[String,Object]]; [错误] 方法 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
  }
}

但这是正确的方法吗?

【问题讨论】:

    标签: java scala scala-java-interop


    【解决方案1】:

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

    List(Map[String, AnyRef]("A" -> "B").asJava).asJava
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2015-10-31
        • 2011-09-20
        • 2014-12-25
        • 1970-01-01
        相关资源
        最近更新 更多