在实现它的类中设置接口的setter

时间:2017-11-29 07:45:25

标签: interface kotlin

刚开始在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

我哪里错了?

1 个答案:

答案 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"
}

解决此问题。