Kotlin中默认访问器的实现是什么

Kotlin中默认访问器的实现是什么,kotlin,Kotlin,我有一节这样的课 class Square(var width: Int, var height: Int) { var color : String = "red" } 正如我的理解,Kotlin的编译器将考虑宽度、高度和颜色是类正方形的属性,因此它将自动生成这些属性的SETER和GETTER。 对于属性颜色,我想它的getter和setter应该是这样的 var color : String = "red" get() = field set(value) { field = va

我有一节这样的课

class Square(var width: Int, var height: Int) {
    var color : String = "red"
}
正如我的理解,Kotlin的编译器将考虑宽度、高度和颜色是类正方形的属性,因此它将自动生成这些属性的SETER和GETTER。 对于属性颜色,我想它的getter和setter应该是这样的

var color : String = "red"
get() = field
set(value) { field = value}

但是宽度和高度属性的默认setter和getter如何呢。这些属性没有初始化值,因此在getter和setter中不能有“field”标识符。有人知道答案吗?

如果您需要在类中存储简单属性,并且希望通过具有相同名称的构造函数参数对其进行初始化,则放置在类声明头中的属性非常方便。如果您使用这些,您将放弃为它们提供自定义setter和getter的功能—这只能对类主体中的属性执行

否则,它们的getter(和
var
s的setter)的默认实现与类主体中的属性相同。它们只返回(并设置)支持字段的值


编辑,跟进上面的注释:这也意味着构造函数中的属性始终必须初始化,它们不能是计算属性,因为您不能为它们提供不使用其支持字段的getter和setter。

如果您需要在类中存储简单属性,并且希望通过具有相同名称的构造函数参数初始化它们,则放置在类声明头中的属性非常方便。如果您使用这些,您将放弃为它们提供自定义setter和getter的功能—这只能对类主体中的属性执行

否则,它们的getter(和
var
s的setter)的默认实现与类主体中的属性相同。它们只返回(并设置)支持字段的值


编辑,跟进上面的注释:这也意味着构造函数中的属性始终必须初始化,它们不能是计算属性,因为你不能给他们不使用支持字段的getter和setter。

我看不出使用
字段
标识符和初始值之间有什么联系。@MarkoTopolnik in Kotlin如果你不在getter或setter的主体内使用“field”标识符,那么属性可能不需要初始化,例如:类Square(var-width:Int,var-height:Int){val-isSquare:Boolean-get()=width==height}但是如果您像这个get()=字段那样更改“isSquare”的getter,那么必须初始化属性“isSquare”。因为在第一个示例中根本没有支持字段,它是一个计算属性。这仍然与具有默认值无关。在您的情况下,所有属性都将有一个支持字段,只是其中一个有一个默认值,另外两个必须传递给构造函数。我看不出使用
字段
标识符和初始值之间有什么联系。@MarkoTopolnik In Kotlin,如果您不使用“field”标识符在getter或setter的主体内,则该属性可能不需要初始化,例如:类Square(var-width:Int,var-height:Int){val-isSquare:Boolean-get()=width==height},但如果更改“isSquare”的getter,如get()=字段,则属性“isSquare”必须初始化。因为在第一个示例中根本没有支持字段,它是一个计算属性。这仍然与具有默认值无关。在您的情况下,所有属性都将有一个支持字段,只有一个具有默认值,另外两个必须传递给构造函数。