理解Kotlin的back field

1,199 阅读1分钟

Kotlin 有区别于 Java 的 back field 的概念。用过 Kotlin 的人都知道,Kotlin 的属性是天生带 Setter/Getter 方法的,不过如果要重写他们的话,写法有所不同。

var a: String = "1"
    get() = field
    set(value) {
        field = value
    }

我们可以看到,当需要重写 Setter/Getter 方法的时候,就需要用到 field 这个新概念,它其实是代表这个域本身。有些人刚开始看到这个东西的时候,可能会觉得很神秘,其实它里面的实现逻辑很简单,就是对应到 Java 中 Setter/Getter 方法,然后 field 在 Java 的方法中就是该属性本身,上面的代码编译后的代码:

@NotNull
private String a = "1";

@NotNull
public final String getA() {
  return this.a;
}

public final void setA(@NotNull String value) {
  Intrinsics.checkParameterIsNotNull(value, "value");
  this.a = value;
}

转换成Java后很容易理解field的作用