Kotlin:如何通过对象访问类的私有数据成员?

时间:2019-06-21 09:54:02

标签: kotlin

如果p.name是私有对象,如何通过其对象访问?

发信人和二传手在这里不起作用。

class Person(f_name : String, l_name : String){
    private var name = f_name + l_name
    get() = field
    set(value) {
        field = value
    }
    private var age : Int? = null
        get() {
            println("Age getter")
            return field
        }
        set(value) {
            println("Age setter")
            field = value
        }
    constructor(f_name: String, l_name: String, age : Int):this(f_name, l_name){
        name = "Mr./Msr./Ms. $f_name $l_name"
        this.age = age
    }

}

fun main() {
    var p = Person("M", "M")
    var m = Person("P", "P", 20)

    println("p : Person(${p.name})") // Shows error here

}

我无法以这种方式访问​​任何私人成员。 这里没有使用getter和setter。

1 个答案:

答案 0 :(得分:1)

您可能想使用不可变的数据类来解决这个问题。然后,setter是不必要的,而getter可以是公共的:

data class Person(
    val firstName: String,
    val lastName: String,
    val age: Int? = null
)

您可以将完整名称定义为扩展属性,

val Person.name get() = "Mr./Msr./Ms. $firstName $lastName"

默认情况下,私有属性不可访问,但是您可以根据需要限制设置器的访问权限:

var name: String = ""
    private set

通常,属性是获取器,或者是访问字段的设置器。该领域从未公开。因此,要实现所需的功能,只需将属性声明为var name: String