如果在kotlin中将setter设置为private,如何分配新值?

我是kotlin的新手,无法理解getter和setter在kotlin中的表现,所以如果我把setter设置为private。 那么更新值的方法是什么?

package foo class Person() { var name: String = "defaultValue" private set } 

如果你把你的设置器设置为私有的,那么这个设置器只能在其类中才能访问。 换句话说,即使你的设置是私人的,但是只能在class级内部,你也可以使用正常的分配。

 class Person() { var name: String = "defaultValue" private set fun foo(bar: String) { name = bar // name can be set here } } fun main(args: Array) { Person().name = "foo" // error. Name can be accessed but can not be modified here as its setter is private. } 

有关更多信息,请查阅Kotlin的可见性文档 。

上面的kotlin代码将被kotlin编译器转换为java代码,如下所示:

 package foo; public final class Person{ private String name = "defaultValue"; public final String getName(){ return name; } private final void setName(String name){ this.name=name; } } 

这意味着您只能更改Person类中的name字段。 另一种情况是,如果你想修改name属性私人 setter Person 。 你可以使用javareflection代替,例如:

 val person = Person(); val field = Person::name.javaField!!.apply { isAccessible = true } field.set(person, "bob") println(person.name)// "bob" val setter = Person::class.java.getDeclaredMethod("setName", String::class.java)!! .apply { isAccessible = true } setter.invoke(person, "john") println(person.name)// "john"