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

results matching ""

    No results matching ""