我试图设置一个属性值,如下面的代码片段所示.这个问题并没有回答这个问题.
var person = Person("john", 24)
//sample_text.text = person.getName() + person.getAge()
var kon = person.someProperty
person.someProperty = "crap" //this doesn't allow me to set value
kon = "manulilated" //this allows me to set the value
sample_text.text = kon
class Person(val n: String, val a: Int){
var pname: String = n
var page: Int = a
var someProperty: String = "defaultValue"
get() = field.capitalize()
private set(value){field = value}
fun Init(nm: String, ag: Int){
pname = nm
page = ag
}
fun getAge(): Int{
return page
}
fun getName(): String{
return pname
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我能够在第二行设置Person类的值而不是第一行?
首先,private修饰符是你的问题.
更改
private set(value){field = value}
Run Code Online (Sandbox Code Playgroud)
至
set(value){field = value}
//public by default
Run Code Online (Sandbox Code Playgroud)
否则你不能在课外使用setter.阅读这里.
对于在类中声明的成员: private表示仅在此类中可见(包括其所有成员);
其次,你误解了一些事情:
var kon = person.someProperty
kon = "manulilated"
Run Code Online (Sandbox Code Playgroud)
在这些行中,您不会更改对象中的属性.创建变量后kon,作为String指向someProperty,您将该局部变量重新分配给其他变量.这种重新分配不等于改变价值person.someProperty!它对物体完全没有影响.
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |