如何设置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 } } 

为什么我可以在第二行设置Person类的值,但不是第一行?

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

更改

 private set(value){field = value} 

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

否则,你不能在课堂以外使用setter。 在这里阅读。

对于在类中声明的成员: 私有方法只在这个类中可见(包括其所有成员);

其次,你误解了一些东西:

  var kon = person.someProperty kon = "manulilated" 

在这些行中,您不会更改对象中的属性。 在创建variableskon ,作为指向somePropertyString ,您将该局部variables重新分配给别的东西。 这个重新分配不等于改变 person.someProperty的值! 对象完全没有影响。

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