如何在Kotlin中设置属性值

The*_*ian 2 android kotlin

我试图设置一个属性值,如下面的代码片段所示.这个问题并没有回答这个问题.

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类的值而不是第一行?

s1m*_*nw1 8

首先,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!它对物体完全没有影响.