2017-06-26 2 views

答えて

6

セッターをプライベートに設定すると、このセッターはそのクラス内からのみアクセスできます。言い換えれば、あなたのセッターがプライベートであってもクラス内からのみ、通常の割り当てを使用することができます。

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を参照してください。

0

上記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" 
関連する問題