Java Kotlin`this`未在继承的类中返回正确的实例
我有两节课。一个是另一个的父母。我正在Foo内部实例化HashMap的一个对象,并试图访问该对象,但在类栏中,我得到了对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<>
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
中的另一种方法中获得相同的结果。