Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Consider following Kotlin-Code:

class Foo(input: Int) {
    private var someField: Int = input
        get() = -field
        set(value) {
            field = -value
        }

    fun bar() {
        println(someField)
    }
}

fun main() {
    Foo(1).bar()
}

This prints -1 in the console which means that inside method bar() someField references the attribute and not the corresponding getter. Is there a way that allows me to use the get()-method as if I was referencing this field from outside?

question from:https://stackoverflow.com/questions/65945927/how-to-address-a-getter-from-inside-the-class-in-kotlin

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
73 views
Welcome To Ask or Share your Answers For Others

1 Answer

Perhaps you could track the "raw" value separately from the negative value? Something like this:

class Foo(input: Int) {
    private var _someField: Int = input
    var someField: Int
        get() = -_someField
        set(value) {
            _someField = -value
        }

    fun bar() {
        println(someField)
    }
}

Now the class internals can reference _someField to deal directly with the raw value, while outside clients can only "see" someField.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...