Kotlin 属性的私有 getter 和 public setter

2022-08-31 14:24:44

如何在 Kotlin 中创建一个拥有私有 getter(或者只是没有它)但有一个公共 setter 的属性?

var status
private get

不适用于错误:Getter visibility must be the same as property visibility

在我的情况下,原因是Java互操作:我希望我的Java代码能够调用,但不能调用。setStatusgetStatus


答案 1

目前在 Kotlin 中,不可能有一个属性,其 setter 比该属性更明显。问题跟踪器中存在语言设计问题,请随时观看/投票或分享您的用例:https://youtrack.jetbrains.com/issue/KT-3110


答案 2

在当前的 Kotlin 版本 (1.0.3) 中,唯一的选择是使用单独的 setter 方法,如下所示:

class Test {
    private var name: String = "name"

    fun setName(name: String) {
        this.name = name
    }
}

如果您希望限制外部库访问 getter,则可以使用内部可见性修饰符,从而允许您在库中仍使用属性语法:

class Test {
    internal var name: String = "name"
    fun setName(name: String) { this.name = name }
}

fun usage(){
    val t = Test()
    t.name = "New"
}

推荐