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

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

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

2 Solutions collect form web for “如果在kotlin中将setter设置为private,如何分配新值?”

如果你把你的设置器设置为私有的,那么这个设置器只能在其类中才能访问。 换句话说,即使你的设置是私人的,但是只能在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" 
  • 如何替换kotlin中所有出现的子字符串
  • 懒惰variables与重置
  • Kotlin对象expression式没有按预期工作
  • 尝试在IntelliJ IDEA中运行Kotlin脚本
  • Kotlingenericstypes参数
  • 如何在Kotlin同时捕捉到很多例外
  • 使用特定字符串从集合中过滤数据
  • Kotlin和Android TextWatcher具有CharSequence / String替换function
  • 反序列化kotlin数据类android
  • kotlin项目不能在gradle中构建
  • 什么是在Kotlin复制地图最聪明的方法?
  • Kotlin language will be the best programming language for Android.