Kotlin 属性

属性和 Java 类似, 可以是 var 或者 val, 可以加可见性修饰符。
声明属性的完整语法是:

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

var name: String
    get() = field - 1
    set(value) {
        field = value -1
    }

Kotlin 提供了一种自动的后端域变量, 可以通过 field 标识符来访问。

一般情况不会修改属性的 getter 和 setter, 使用默认实现就可以,如上的代码并不常用。常用的是修改可见性,如下示例:

var name: String
    private set // 可见度为 private, 并使用默认实现
  • 常量

如果属性值在编译期间就能确定, 则可以使用 const 修饰符,达到 Java 里面的 final static 常量的效果。
但是必须是顶级属性,或者 object 的成员,如:

const val DEBUG = true

class Hello {
    companion object {
        const val TAG = "hello"
    }
}
  • 延迟初始化属性

通常, 如果属性声明为非 null 数据类型, 那么属性值必须在构造器内初始化。这种情况带来一些不便,比如有些属性在setup()的时候初始化。这种情况,可以将属性声明为可空变量, 但是会带来 null 值检查。这种情况可以为属性添加lateinit修饰。

class Hello {
    private lateinit var persion: Persion
    fun setup(persion: Persion) {
        this.persion= persion
    }
    fun test() {
        println(persion.name)
    }
}

lateinit 只能用于 var 类属性, 属性类型必须是非 null 的, 而且不能是基本类型。lateinit 属性被初始化之前访问它, 会抛出一个特别的异常。

  • 覆盖属性

和方法的覆盖类似,open 的 属性可以被覆盖,但是属性的类型需要一致。

open class Base {
    open protected val x = 10
}

class Hello: Base() {
    override var x = 12
}

val 可以修改成 var, 反过来不行。


参考
《Programming Kotlin》Stephen Samuel ,Stefan Bocutiu
《Kotlin in Action》Dmitry Jemerov,Svetlana Isakova

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,276评论 9 118
  • Kotlin的类可以有属性。 属性可以用关键字var声明为可变的,否则使用只读关键字val。 Getters 和 ...
    甲乙丙丁你我他阅读 2,347评论 3 0
  • Kotlin系统化学习-20170823文章中有大部分内容是借鉴《Kotlin实战》中文版,特此注明一下。 Kot...
    ClAndEllen阅读 1,726评论 2 10
  • 枪声成绩2:50,有史以来最慢成绩,但是慢有慢的好处,可以看到不一样的风景。 1、举家出行,爸爸在前面开路,宝宝跟...
    心理咨询师李彬阅读 147评论 0 0
  • 01 “哗啦。” 妈妈把朱辉拿来的东西扔到了门外。 朱辉这小子倒挺有意思,他到门外拾掇拾掇,拎着那些补品推门又进来...
    党岭阅读 1,178评论 2 4