如果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。
答案 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
。