Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Kotlin中getter/setter的语法_Kotlin - Fatal编程技术网

理解Kotlin中getter/setter的语法

理解Kotlin中getter/setter的语法,kotlin,Kotlin,关于这样一个代码示例: var someProperty: String = "defaultValue" get() = field set(value) { field = value } 是否必须在属性声明的正下方编写get-/set方法?如果在属性声明和get/set定义之间有一些内容,则无法使用该方法 嵌套只是为了更好地阅读,还是语法的一部分?因为在这一部分中使用了var及其公共属性 get() = field set(value) { f

关于这样一个代码示例:

var someProperty: String = "defaultValue"
    get() = field
    set(value) { field = value }
是否必须在属性声明的正下方编写get-/set方法?如果在属性声明和get/set定义之间有一些内容,则无法使用该方法


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

因为在这一部分中使用了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;
   }
}
@元数据(
mv={1,4,1},
bv={1,0,3},
k=1,
3.1\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2\n\u0002\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\\\\\\\\4\b\u0007\u0010\b¨\u0006\t“},
d2={“Lorg/example/Fo;”、“”、“()V”、“someProperty”、“getSomeProperty”、“Ljava/lang/String;”、“()Ljava/lang/String;”、“setSomeProperty”、“Ljava/lang/String;”)V、“stream”}
)
公开期末班{
@NotNull
私有字符串someProperty=“defaultValue”;
@NotNull
公共最终字符串getSomeProperty(){
归还此.someProperty;
}
public final void setSomeProperty(@NotNull String var1){
Intrinsics.checkNotNullParameter(var1,“”);
this.someProperty=var1;
}
}
最后是顺序问题,声明属性的完整语法是

var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]
var[:][=]
[]
[]
因此,您不能在声明部分之间添加任何内容