4

所以我有一个看起来像这样的 Kotlin 类:

class MyClass {
    var myString: String = ""
        set(value) {
            field = value
            doSomethingINeed()
        }

    constructor(myString: String) {
        this.myString = myString
    }
}

但是,Android Studio 警告我可以将其用作默认构造函数。当我选择它时,它会将其更改为:

class MyClass(var myString: String)

现在我失去了覆盖 setter 的机会,因为如果我创建一个名为的方法,setMyString()我会得到一个编译器错误。

如果该字段是默认构造函数的一部分,是否有办法覆盖 setter,或者我是否必须使用选项 1 并忽略我收到的警告?

4

1 回答 1

9

它的快速修复肯定会把事情搞砸,但评论试图为你指出正确的方向。您想定义一个只接受参数(不定义属性)的主构造函数,然后使用该参数进行属性初始化。像这样的东西:

class MyClass(myString: String) {
    var myString: String = myString
        set(value) {
            field = value
            doSomethingINeed()
        }
}
于 2017-05-21T02:44:52.820 回答