在Kotlin中,如何将主构造函数中属性的setter设置为私有?

18

在 Kotlin 中,如何使主构造函数中属性的 setter 私有化?

class City(val id: String, var name: String, var description: String = "") {

    fun update(name: String, description: String? = "") {
        this.name = name
        this.description = description ?: this.description
    }
}

我希望将属性name的setter设为private,getter设为public,该如何操作?


请查看以下链接以了解有关属性的更多信息:https://kotlinlang.org/docs/reference/properties.html - Nandkishor mewara
https://dev59.com/lVkS5IYBdhLWcg3wDyn5 - Nandkishor mewara
2个回答

38

0

你可以试试这样做

class Sample(var id: Int, private var name:String) {

    // Backing field
    var _name: String = ""
        get() = name
        private set

}

fun main(args: Array<String>) {
     println("Hello World")

     val sample = Sample(1, "hello")
    //    println(sample.name); It's not possible
    println(sample._name)
}

1
我认为应该交换命名方式。构造函数中使用_name,属性中使用name - marstran
你最终会有两个名称。在 _nameset 后,get 的返回值不会改变。 - Miha_x64
添加第二个构造函数可能是更好的解决方案。 - Joshua Yan
正如@Miha_x64所指出的那样,您必须实现“后备字段”的setter,以便它更改构造函数字段。 - marstran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接