如果在kotlin中将setter设置为private,如何分配新值?
我是kotlin的新手,无法理解getter和setter在kotlin中的表现,所以如果我把setter设置为private。 那么更新值的方法是什么?
package foo class Person() { var name: String = "defaultValue" private set }
如果你把你的设置器设置为私有的,那么这个设置器只能在其类中才能访问。 换句话说,即使你的设置是私人的,但是只能在班级内部,你也可以使用正常的分配。
class Person() { var name: String = "defaultValue" private set fun foo(bar: String) { name = bar // name can be set here } } fun main(args: Array<String>) { 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
。 你可以使用java反射代替,例如:
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"