实现在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" } }