というカスタムプロパティを持つget
があり、それがfield
という識別子を使用していない場合、とにかくバッキングフィールドが生成されることに気付きました。私はバイトコードをチェックし、ドキュメントがようにも述べている:それはアクセサの少なくとも一つの デフォルトの実装を使用して、または カスタム場合場合Kotlin - "計算された" varプロパティの有用性
バッキングフィールドは、プロパティのために生成されますアクセサはフィールド識別子を通じてそれを参照します。
(強調は私です)
は、このようなクラスを考えてみましょう。
class Banana {
var ripeness = 1
var color: String = "green"
get() = when {
ripeness > 80 -> "brown"
ripeness > 50 -> "yellow"
else -> "green"
}
}
val b = Banana()
b.color = "blue"
println(b.color)
しかし、println
は常に関係なく、私はcolor
へを設定したもの、「緑」印刷されません:それが生成されますvar
プロパティ、デフォルトset
(したがって、バッキングフィールド)がありますので。とにかくバッキングフィールドは「青」に設定されます。
アクセサーメソッドの外側(またはリフレクションを介して)にアクセスする方法がないため、これは理由を考えることができません。
ここに何か不足していますか?たぶんユースケースやバッキングフィールドにアクセスする別の方法?それとも単なるバグですか(IntelliJの警告がありません)? "計算"
カスタムケースのバッキングフィールドを使用する場合があります。そうしないとバッキングフィールドが役に立たなくなります。私はこれがコンパイラの警告を与えているはずだったと思います。 – marstran
@marstranはい私は警告に同意します。それは最悪のケースですが、すぐに実行できるものがあるので、それ以上のものがあるかもしれないと思いました。 – Lovis