kotlin属性声明有两个关键字
- var: 声明为可变属性,可以延迟加载初始值,可以修改变量属性的值,与Java声明变量类似
- val: 声明为只读属性, 声明时必须赋初始值并且不能修改,相当于Java中的final
1 | var name : String? = null |
声明一个属性的完整语法:
1 | var <propertyName>[: <PropertyType>] [= <property_initializer>] |
Getters和Setters
其初始器(initializer)、getter 和 setter 都是可选的(注意:val只读属性没有setter)
1 | val age : Int |
执行结果
1 | get:Alice |
获取name的值执行get 给name赋值时执行set
当然也可以加入判断语句,比如属性name不允许返回字符串”Alice”; 不允许属性的值是”Bill”
这就和Java中将属性变量设置为private并提供public getter 和 setter 的方法是一样的;因为通过默认 getter 和 setter 访问私有属性会被优化,所以不会引入函数调用开销。
1 | name: String = "Alice" |
幕后字段 field
上面代码里出现的字段field 是Kotlin自动提供叫幕后字段(类似 this 和 it); 只能在属性的get和set中使用,对应的还有幕后属性
幕后属性
1 | private var _table: Map<String, Int>? = null |