作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已尝试按照以下代码段设置属性值。这 SO question没有回答问题。
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
}
}
为什么我可以在第二行而不是第一行设置 Person 类的值?
最佳答案
首先,private
修饰符是您的问题。
改变
private set(value){field = value}
到
set(value){field = value}
//public by default
否则你不能在类外使用setter。阅读here .
For members declared inside a class: private means visible inside this class only (including all its members);
其次,你误会了一些东西:
var kon = person.someProperty
kon = "manulilated"
在这些行中,您没有更改对象中的属性。创建变量 kon
后,作为指向 someProperty
的 String
,您可以将该局部变量重新分配给其他内容。此重新分配不等于更改 person.someProperty
的值!它对对象完全没有影响。
关于android - 如何在 Kotlin 中设置属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014795/
我是一名优秀的程序员,十分优秀!