理解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[:][=]
[]
[]
因此,您不能在声明部分之间添加任何内容