一.定义类
1.field
针对你定义的每一个属性,Kotlin都会产生一个field,一个getter,以及一个setter,field用来存储属性数据,你不能直接定义field,Kotlin会封装field,保护它里面的数据,只暴露给getter和setter使用。属性的getter方法决定你如何读取属性值,每个属性都有getter方法,setter方法决定你如何给属性赋值,所以只有可变属性才会有setter方法,尽管Kotlin会自动提供默认的getter和setter方法,但在需要控制如何读写属性数据时,你也可以自定义他们。
class Player{
var name="XiaoHua"
get()=field.capitalize()
private set(value) {
field=value.trim()
}
var age=10
get() = field.absoluteValue
set(value) {
field=value.absoluteValue
}
}
2.计算属性
计算属性是同过一个覆盖的get或set运算符来定义,这时field就不需要了。
class Player {
var calculateValue
get() = (1..10).shuffled().first()
}
二.初始化
1.主构造函数
我们在Player类的定义头中定义一个主构造函数,使用临时变量为Player的各个属性提供初始值,而在Kotlin中,为了便于识别,临时变量(包括仅引用一次的参数),通常都会以下划线开头的名字命名。
class Player (
_name : String,
_age : Int,
_isNormal : Boolean
){
var name=_name
get()=field.capitalize()
private set(value) {
field=value.trim()
}
var age=_age
get() = field.absoluteValue
set(value) {
field=value.absoluteValue
}
var isNormal=_isNormal;
}
2.在主构造函数里定义属性
Kotlin允许你不使用临时变量赋值,而是直接用一个定义同时指定参数和类属性,通常,我们更喜欢用这种方式定义类属性,因为他会减少重复代码。