Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin`this`未在继承的类中返回正确的实例_Java_Android_Kotlin - Fatal编程技术网

Java Kotlin`this`未在继承的类中返回正确的实例

Java Kotlin`this`未在继承的类中返回正确的实例,java,android,kotlin,Java,Android,Kotlin,我有两节课。一个是另一个的父母。我正在Foo内部实例化HashMap的一个对象,并试图访问该对象,但在类栏中,我得到了对presenter as Map而不是presenter as HashMap的引用,因此我的HashMap方法调用都不起作用 我已经阅读了,并从中尝试指定this.presenter在init{…}的内部,就像在Java中一样,但我似乎仍然无法从子类内部访问HashMap open class Foo { var presenter = Map<>

我有两节课。一个是另一个的父母。我正在Foo内部实例化HashMap的一个对象,并试图访问该对象,但在类栏中,我得到了对
presenter as Map
而不是
presenter as HashMap
的引用,因此我的HashMap方法调用都不起作用

我已经阅读了,并从中尝试指定
this.presenter
init{…}
的内部,就像在Java中一样,但我似乎仍然无法从子类内部访问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)

}
开放类Foo{
var presenter=Map
初始化{
presenter=HashMap
}
}
开放类栏:Foo(){
//这是在尝试调用。在映射界面上放置,因此我得到一个错误
presenter.put(someData)
}

您必须将类型指定为
可变地图
,还必须指定地图的类型:

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("","")
   }

}
开放类Foo{
val演示者:MutableMap=HashMap()
}
开放类栏:Foo(){
//这是在尝试调用。在映射界面上放置,因此我得到一个错误
乐事{
presenter.put(“,”)
}
}

您可以让编译器推断您的
演示者的类型
,这是一个只读映射,没有意义的
put

。对于我想在init内部分配的自定义类,情况如何?我必须有意识地对此进行可变实现吗?不,这只有在您使用集合和映射时才有必要,因为Kotlin鼓励只读实现您也可以在
Foo
中的另一种方法中获得相同的结果。