Kotlin v2.0.21 Help

什么是隐式幕后字段

在 Kotlin 中,当你声明一个属性时,如果没有显式地为其指定幕后字段,Kotlin 会自动创建一个默认的幕后字段。 这种情况下的幕后字段就被称为隐式幕后字段(Implicit Backing Field)。

举例:

class Example { private var _value: Int = 0 // 显式定义幕后字段 var value: Int get() = _value set(newValue) { _value = newValue } } class Example2 { var value: Int = 0 // 隐式定义幕后字段 }

在这个例子中,有两个类: ExampleExample2

将它们反编译为 Java:

public final class Example { private int _value; public final int getValue() { return this._value; } public final void setValue(int newValue) { this._value = newValue; } } public final class Example2 { private int value; public final int getValue() { return this.value; } public final void setValue(int var1) { this.value = var1; } }

我们可以发现,它们生成的结构其实都是一样的,都包括 gettersetter

所以在 Kotlin 中,如果没有显示定义幕后字段的话,那么在进行编译的时候,会帮属性自动创建一个幕后字段(可以在 gettersetter 中通过 field 标识符来调用)。

class Example { var counter: Int = 0 set(value) { if (value >= 0) { // 使用 field 来引用属性的幕后字段 field = value } } }
Last modified: 26 十一月 2024