美文网首页kotlin
Kotlin-属性与字段

Kotlin-属性与字段

作者: 有腹肌的豌豆Z | 来源:发表于2021-01-20 13:05 被阅读0次

    属性

    声明属性

    Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的。

    class Address {
        var name: String = "Holmes, Sherlock"
        var street: String = "Baker"
        var city: String = "London"
        var state: String? = null
        var zip: String = "123456"
    }
    

    要使用一个属性,只要用名称引用它即可:

    fun copyAddress(address: Address): Address {
        val result = Address() // Kotlin 中没有“new”关键字
        result.name = address.name // 将调用访问器
        result.street = address.street
        // ……
        return result
    }
    

    Getters 与 Setters

    声明一个属性的完整语法是

    var <propertyName>[: <PropertyType>] [= <property_initializer>]
        [<getter>]
        [<setter>]
    

    其初始器(initializer)、getter 和 setter 都是可选的。属性类型如果可以从初始器 (或者从其 getter 返回值,如下文所示)中推断出来,也可以省略。

    var allByDefault: Int? // 错误:需要显式初始化器,隐含默认 getter 和 setter
    var initialized = 1 // 类型 Int、默认 getter 和 setter
    

    一个只读属性的语法和一个可变的属性的语法有两方面的不同:1、只读属性的用 val开始代替var 2、只读属性不允许 setter

    val simple: Int? // 类型 Int、默认 getter、必须在构造函数中初始化
    val inferredType = 1 // 类型 Int 、默认 getter
    

    我们可以为属性定义自定义的访问器。如果我们定义了一个自定义的 getter,那么每次访问该属性时都会调用它 (这让我们可以实现计算出的属性)。以下是一个自定义 getter 的示例:

    val isEmpty: Boolean
        get() = this.size == 0
    

    如果我们定义了一个自定义的 setter,那么每次给属性赋值时都会调用它。一个自定义的 setter 如下所示:

    var stringRepresentation: String
        get() = this.toString()
        set(value) {
            setDataFromString(value) // 解析字符串并赋值给其他属性
        }
    

    按照惯例,setter 参数的名称是 value,但是如果你喜欢你可以选择一个不同的名称。
    自 Kotlin 1.1 起,如果可以从 getter 推断出属性类型,则可以省略它:

    val isEmpty get() = this.size == 0  // 具有类型 Boolean
    

    如果你需要改变一个访问器的可见性或者对其注解,但是不需要改变默认的实现, 你可以定义访问器而不定义其实现:

    var setterVisibility: String = "abc"
        private set // 此 setter 是私有的并且有默认实现
    

    相关文章

      网友评论

        本文标题:Kotlin-属性与字段

        本文链接:https://www.haomeiwen.com/subject/ifldaktx.html