Kotlin在其他地方访问支持领域?

时间:2017-10-25 02:50:10

标签: kotlin

我发现它只能访问集合中的后备字段或get.Is有什么方法可以访问类中其他地方的后备字段? 例如。

var width:Int=0
get() {
    return field*10;
}
set(value) {
    field=value/10;
}

我想访问真正的值,但不是多次10

当我使用c#时,没有字段关键字,所以总是需要声明一个新变量来存储真实数据。在前面的例子中,它将是一个类似的东西

private var _width=0;
var width:Int
get() {
    return _width*10;
}
set(value) {
    _width=value/10;
}

所以如果我想在课堂上访问真正的价值,我可以访问_value。 但是在kotlin中,如果没有这些详细的声明,有没有可能只能访问支持领域?

2 个答案:

答案 0 :(得分:2)

没有。您的C#示例在Kotlin中运行正常,它被称为backing property

答案 1 :(得分:1)

Kotlin,您可以使用支持属性

支持属性

如果你想做一些不适合这个"隐式支持领域"方案,您可以随时回到拥有支持属性:

private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
    get() {
        if (_table == null) {
            _table = HashMap() // Type parameters are inferred
        }
        return _table ?: throw AssertionError("Set to null by another thread")
    }

在所有方面,这与Java中的相同,因为使用默认getter和setter访问私有属性是优化的,因此不会引入函数调用开销。