私はkotlinで新しく、getterとsetterがkotlinでどのようにふるまうのか理解できません。次に、値を更新する方法は何ですか。kotlinでセッターをプライベートに設定した場合、新しい値を割り当てる方法は?
package foo
class Person() {
var name: String = "defaultValue"
private set
}
私はkotlinで新しく、getterとsetterがkotlinでどのようにふるまうのか理解できません。次に、値を更新する方法は何ですか。kotlinでセッターをプライベートに設定した場合、新しい値を割り当てる方法は?
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のVisibility documentationを参照してください。
上記kotlinコードは、より以下のように似kotlinコンパイラによって、Javaコードに変換されます:
あなただけPerson
クラスでname
フィールドを変更することができることを意味しています。もう1つの状況はname
プロパティをプライベートセッターで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"
私はあなたのセッターをプライベートにする理由は何ですか? –