我是的新手Kotlin,所以我有这个界面。
interface User {
var nickName : String
}
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个PrivateUser实现此接口的类。我还必须实现abstract成员nickName。
通过构造函数非常简单
class PrivateUser(override var nickName: String) : User
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在类内实现成员时,会Idea生成此代码
class Button: User {
override var nickName: String
get() = TODO("not implemented")
set(value) {}
}
Run Code Online (Sandbox Code Playgroud)
让我困惑的是如何进一步实施它。
必须在Kotlin中初始化属性。在构造函数中声明属性时,将使用传入的内容对其进行初始化。如果在主体中声明该属性,则需要自己定义它(使用默认值或从其他属性中解析)。
一些例子:
class Button : User {
override var nickname = "Fred"
}
class Button(val firstName: String, val lastName: String) : User {
override var nickname = "${firstname[0]}$lastname"
}
Run Code Online (Sandbox Code Playgroud)
如果您要使用非默认的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"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5890 次 |
| 最近记录: |