实现在Kotlin中的接口中声明的属性

我是Kotlin新手,所以我有这个界面。

 interface User { var nickName : String } 

现在我想创建一个实现这个接口的类PrivateUser 。 我也要实现抽象成员nickName

通过构造函数,它非常简单

 class PrivateUser(override var nickName: String) : User 

但是当我尝试实现类里面的成员Idea生成我这个代码

 class Button: User { override var nickName: String get() = TODO("not implemented") set(value) {} } 

我很困惑如何进一步实施。

属性必须在Kotlin中初始化。 当你在构造函数中声明属性时,它会被初始化,如果你在body中声明它,你需要自己定义它,或者使用默认值,或者从其他属性中解析。

一些例子:

 class Button : User { override var nickname = "Fred" } class Button(val firstName: String, val lastName: String) : User { override var nickname = "${firstname[0]}$lastname" } 

如果你想要一个非默认的getter和/或setter,或者如果你想要一个没有后台字段的属性(当getter和setter在被访问时被动态地计算),由IDEA生成的代码是有用的。

更多例子:

 class Button : User { override var nickname = "Fred" get() = if (field.isEmpty()) "N/A" else field set(value) { // No Tommy field = if (value == "Tommy") "" else value } } class Button(val number: Int) : User { var id = "$number" private set override var nickname: String get() { val parts = id.split('-') return if (parts.size > 1) parts[0] else "" } set(value) { field = if (value.isEmpty()) "$number" else "$value-$number" } }