如何在Kotlin中设置属性值

时间:2017-12-28 21:49:45

标签: android kotlin

我尝试设置属性值,如下面的代码段所示。这个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类的值而不是第一行?

2 个答案:

答案 0 :(得分:8)

首先,private修饰符是你的问题。

更改

private set(value){field = value}

set(value){field = value}
//public by default

否则你不能在课外使用setter。阅读here

  

对于在类中声明的成员:   私有表示仅在此类中可见(包括其所有成员);

其次,你误解了一些事情:

 var kon = person.someProperty
 kon = "manulilated" 

在这些行中,您不会更改对象中的属性。创建变量kon后,作为String指向someProperty,您将该局部变量重新分配给其他变量。此重新分配不等于更改 person.someProperty的值!它对物体完全没有影响。

答案 1 :(得分:3)

someProperty有私人二传手。当setter是私有的时,你不能在课外设置它