【发布时间】:2018-05-14 20:12:52
【问题描述】:
我有这样的课
class Square(var width: Int, var height: Int) {
var color : String = "red"
}
据我了解,Kotlin 的编译器会认为宽度、高度和颜色是 Square 类的属性,因此它会自动为这些属性生成 setter 和 getter。
有了属性颜色,我猜它的getter和setter应该是这样的
var color : String = "red"
get() = field
set(value) { field = value}
但是 width 和 height 属性的默认 setter 和 getter 怎么样。这些属性没有初始化值,因此它们在 getter 和 setter 中不能有“字段”标识符。有人知道答案吗?
【问题讨论】:
-
我没有看到使用
field标识符和存在初始值之间的联系。 -
@MarkoTopolnik 在 Kotlin 中,如果您不在 getter 或 setter 的主体内使用“字段”标识符,则可能不需要初始化该属性,例如:class Square(var width: Int, var height: Int) { val isSquare : Boolean get() = width == height } 但如果你像 get() = field 那样更改“isSquare”的getter,那么必须初始化“isSquare”属性。
-
因为在第一个示例中根本没有支持字段,它是一个计算属性。这仍然与具有默认值无关。在您的情况下,所有属性都将有一个支持字段,只有一个具有默认值,另外两个必须传递给构造函数。
标签: kotlin