Kotlin`his`没有在继承的类中返回正确的实例

时间:2017-11-02 20:30:01

标签: java android kotlin

我有两节课。一个是另一个的父母。我在Foo中实例化了一个HashMap的对象,并尝试访问该对象,但是在类Bar中,我得到presenter as Map而不是presenter as HashMap的引用,所以我的HashMap方法都没有调用在工作中。

我已经阅读了docs,并尝试在Java this.presenter中指定init{...},但我仍然无法访问HashMap<>来自儿童班的内部。

open class Foo {
    var presenter = Map<>

    init {
        presenter = HashMap<>
    }

}

open class Bar : Foo() {
     //this is trying to call .put on the Map interface, so I get an error
     presenter.put(someData)

}

1 个答案:

答案 0 :(得分:3)

您必须将类型指定为MutableMap,并指定地图的类型:

open class Foo<K,V> {
    val presenter: MutableMap<K,V> = HashMap()
}
open class Bar : Foo<String,String>() {
    //this is trying to call .put on the Map interface, so I get an error
   fun doit(){
        presenter.put("","")
   }

}

您让编译器推断出presenter的类型,这是一个没有put的只读地图。