为类型参数的属性自定义getter

我有一个像这样的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; } } } 

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

我想写在Kotlin,所以我开始这样做:

 class Thing(val property: String?) 

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

 class Thing(property: String?) { val property: String? = property get() = property ?: "blah blah blah" } 

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

初始化器在这里是不允许的,因为该属性没有后台字段

为什么我得到这个错误,以及如何能够如上所述写这个自定义getter?

您需要在get()的主体中使用“field”而不是“property”来声明后台字段 :

 class Thing(property: String?) { val property: String? = property get() = field ?: "blah blah blah" } 

然而,在这个特定的例子中,你最好用非空的属性声明:

 class Thing(property: String?) { val property: String = property ?: "blah blah blah" }