Getters和Setters
完整的定义属性的语法为:
var <propertyName>[: <PropertyType>] [= <property_initializer>]
[<getter>]
[<setter>]
initializer、getter、setter是可选的。属性类型在初始化器中的类型可以推断时也可以忽略。
var allByDefault: Int? // error: 需要显示的初始化器
var initialized = 1 // 类型为Int
只读属性的定义语法与可变对象的不同包括:关键字val、不需要setter:
val simple: Int? // Int类型,默认的getter,必须要在构造方法中初始化
val inferredType = 1 // Int类型,默认的getter
可以使用自定义的访问器,有点像函数。
val isEmpty: Boolean
get() = this.size == 0
相当于重写了它的getter。
自定义的setter如下:
var stringRepresentation: String
get() = this.toString()
set(value) {
setDataFromString(value)// 会在对stringRepresentation赋值时进行调用
}
按照约定,setter方法的参数名为value,你也可以改为任何你喜欢的名字。从Kotlin1.1版本起,你还可以忽略属性类型如果其是可以通过getter推断出来的。
val isEmpty get() = this.size == 0 // Boolean
一个自定义的setter看起来像如下所示:
var stringRepresentation: String
get() = this.toString()
set(value) {
}
setter中的参数value可以使用不同的参数名。
如果你需要改变访问器的可见性或是为其添加注解,但是又不需要改变其默认的实现方式,你可以定义访问器但是不需要定义其主体。
var setterVisibility: String = "abc"
private set // setter是private,默认实现
var setterWithAnnotation: Any? = null
@Inject set // 使用Inject标记setter