繁体   English   中英

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

[英]Implementing properties declared in interfaces in 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中初始化属性。 在构造函数中声明属性时,将使用传入的内容对其进行初始化。如果在主体中声明该属性,则需要您自己定义它(使用默认值或从其他属性中解析)。

一些例子:

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"
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM