刚开始在android中使用kotlin -
我正在尝试在实现它的类中使用接口的setter -
interface MyInterface {
val prop: Int // abstract
var propertyWithImplementation: String
get() = "foo"
set(text){"$text foo"}
fun foo() {
print(prop)
}
}
class Child : MyInterface {
override val prop: Int = 29
override var propertyWithImplementation="bhu"
}
fun main(args: Array<String>) {
println(Child().propertyWithImplementation)
}
输出:BHU
预期产出= bhu foo
我哪里错了?
答案 0 :(得分:3)
你覆盖 var
,没有设置它,也没有在覆盖中使用父设置器,所以最终没有以任何方式使用它。设置它看起来就像是。
class Child : MyInterface {
override val prop: Int = 29
init {
propertyWithImplementation="bhu"
}
}
但如果您这样做,则输出将为foo
,因为这是getter 总是返回的内容。而setter实际上并没有设置任何东西,它只是创建一个字符串并忽略它。
您在界面中没有支持字段,因此您需要将值存储在其他位置,例如
interface MyInterface {
protected var backingProperty: String
var propertyWithImplementation: String
get() = backingProperty
set(text){ backingProperty = "$text foo" }
}
class Child {
override var backingProperty = "foo"
}
解决此问题。