了解Kotlin中的Getters / Setters的语法

迈克尔·泽奇

关于这样的代码示例:

var someProperty: String = "defaultValue"
    get() = field
    set(value) { field = value }

是否必须在属性声明的正下方编写get / set方法?如果我在属性声明和get / set-definition之间有东西,那将不起作用?

嵌套只是为了更好地阅读还是语法的一部分?

纳尔·泰迪(Naor Tedgi)

因为您正在使用var及其公共部分

  get() = field
  set(value) { field = value }

是多余的,并且Kotlin编译器应对此发出警报。

另外,您会看到,将代码编译为带有带有setter和getter的kotlin字节码时结果是相同的

@Metadata(
   mv = {1, 4, 1},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0005\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002R\u001a\u0010\u0003\u001a\u00020\u0004X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0005\u0010\u0006\"\u0004\b\u0007\u0010\b¨\u0006\t"},
   d2 = {"Lorg/example/Fo;", "", "()V", "someProperty", "", "getSomeProperty", "()Ljava/lang/String;", "setSomeProperty", "(Ljava/lang/String;)V", "stream"}
)
public final class Fo {
   @NotNull
   private String someProperty = "defaultValue";

   @NotNull
   public final String getSomeProperty() {
      return this.someProperty;
   }

   public final void setSomeProperty(@NotNull String var1) {
      Intrinsics.checkNotNullParameter(var1, "<set-?>");
      this.someProperty = var1;
   }
}

最后是订单问题,用于声明属性的完整语法为

var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

所以你不能在声明部分之间添加任何东西

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章