2015-11-01 50 views
0

我有這樣的Java接口斯卡拉互操作與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 
    } 
} 

,但我得到這個編譯錯誤

重寫方法getMaps型 ()的java.util.List [java.util.Map [字符串,對象特徵的IFoo ]]; [錯誤]方法 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 
    } 
} 

但它是正確的方法是什麼?

回答

1

您需要Map轉換爲一個Java Map爲好,並有更好的方式來提供的價值類型:

List(Map[String, AnyRef]("A" -> "B").asJava).asJava 
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 
    } 
}