BlackCat
BlackCat

Reputation: 549

Kotlin access backing field in other place?

I find it can only access backing field in the set or get.Is there any way can access backing field in other place at class? for example.

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

I want to access the real value but not it multiple 10

when i using c#,there are no field keyword so always need to declare a new variable to store the real data.In the previous example it's will be something look like

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

so if i want to access real value in the class,i can just access _value. But in kotlin,is there have someway can just access backing field without these verbose declaration?

Upvotes: 1

Views: 741

Answers (2)

vishal jangid
vishal jangid

Reputation: 3025

Kotlin, You can use backing properties

Backing Properties

If you want to do something that does not fit into this "implicit backing field" scheme, you can always fall back to having a backing property:

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

In all respects, this is just the same as in Java since access to private properties with default getters and setters is optimized so that no function call overhead is introduced.

Upvotes: 1

Paul Hicks
Paul Hicks

Reputation: 13999

No. Your C# example works fine in Kotlin, it's called a backing property.

Upvotes: 2

Related Questions