はバッキングフィールドは、それが
バッキングフィールドは、生成されたアクセサの少なくとも1 のデフォルトの実装を使用する場合にのみ、クラス内のプロパティ のために生成されるだけのフィールドであり、プロパティがgetter/setterのデフォルト実装を使用する場合パースペクティブJava
の次のコードが表示された場合。それは正しいように見えます。しかし、 "kotlin"ではExceptionをスローします。私たちは「最初名」または「姓」のプロパティにアクセスしたり、設定した場合、デフォルトのアクセサが呼び出されますので
class User{
var firstName : String //backing field generated
get() = firstName
set(value) {
firstName = value
}
var lastName : String //backing field generated
get() = lastName
set(value) {
lastName = value
}
val name : String //no backing field generated
get() = "{$firstName $lastName}"
var address : String = "XYZ" //^because there is no default //^implementation of an accessor
}
はKotlinでは上記のコードスニペットはStackOverflowのをスローします。したがって、Kotlinでは "user.firstName =" value ""はJavaの "user.setFirstName(" value ")"と同じです。
"set(value){firstName =" value "}"が呼び出されると、
この問題の解決策は、ユーザのバッキングフィールドです。Kotlinでは、バッキングフィールドにアクセサの中の "field"キーワードを使用してアクセスできます。以下の修正されたコードスニペットを見てください。
class User{
var firstName : String get() = field
set(value) {
field = value
}
var lastName : String get() = field
set(value) {
field = value}
}
}
希望します。もっと助けが必要な場合は、私に相談してください。
なぜ最初は否定的なのでしょうか? –
投稿したコードは、コード例全体ではありません。人々は完全な画像を得るために外部リンクに行く必要はありません。そうです、 'field'は突然変異するセッターを助ける特別なキーワードです。 – Phix