从类型参数中为属性定制getter

Far*_*deh 6 kotlin

我有一个Java文件有点像这样:

public class Thing {

    private String property;

    public Thing(String property) {
        this.property = property;
    }

    public String getProperty() {
        if (property == null) {
            return "blah blah blah";
        } else {
            return property;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

显然我的实际课程还有更多,但上面只是一个例子.

我想在Kotlin写这个,所以我从这开始:

class Thing(val property: String?)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用官方文档另一个Kotlin问题作为参考来实现自定义getter ,如下所示:

class Thing(property: String?) {

    val property: String? = property
        get() = property ?: "blah blah blah"

}
Run Code Online (Sandbox Code Playgroud)

但是,我的IDE(Android Studio)property以红色突出显示上面代码第3行的第二行,并给出了以下消息:

此处不允许使用初始化程序,因为该属性没有后备字段

为什么我会收到此错误,如何能够如上所述编写此自定义getter?

mfu*_*n26 11

您需要在您的正文中使用"field"而不是"property" get()才能声明一个支持字段:

class Thing(property: String?) {
    val property: String? = property
        get() = field ?: "blah blah blah"
}
Run Code Online (Sandbox Code Playgroud)

但是,在此特定示例中,使用非null属性声明可能会更好:

class Thing(property: String?) {
    val property: String = property ?: "blah blah blah"
}
Run Code Online (Sandbox Code Playgroud)