Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
68 views
in Technique[技术] by (71.8m points)

How to address a getter from inside the class in Kotlin

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

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

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...