1、属性声明
var:可变变量
val:不可变变量
vararg:可变参数(用于参数声明)
类中声明的属性必须进行初始化,或者使用abstract修饰,但是使用abstract修饰后的属性,在子类中也必须进行初始化
abstract class Test {
abstract var name: String//在子类中进行初始化
var age: Int
var sex: Int = 1
/** * 初始化函数 */
init { age = 15 }
}
2、属性的Getter和Setter
声明属性时,编译器会自动生成对应的getter和setter。但是使用val声明的属性不会生成setter方法,因为val是不可变变量。
完整写法:
var (propertyName):(PropertyType) [=(property_initializer)]
[(getter)]
[(setter)]
3、改变属性的访问权限
var userName: String = "lisi"
private set //设置方法可见度未private,但是不改变原有实现
getter的修饰符必须与当前属性的可见性保持一致
4、Getter和Setter也可以进行自定义
var lastName: String = "li"
get() = field.toUpperCase()
set
var no: Int = 100
get() = field
set(value) {
if (value < 50) {
field = value
} else {
field = 0
}
}
field:幕后参数,与java中的this类似.在这里他指向的是当前的属性
5、延迟初始化属性
声明NULL值属性,在需要的时候再进行初始化,则需要使用lateinit var进行修饰声明
lateinit var user:User
fun initData(){
user = User()
}
6、代理属性
代理属性通过lazy关键字实现懒加载的方式实现:
val address1: String by lazy {
"陕西省西安市"
}
val address2 by lazy {
"陕西省西安市" as String
}
val address3 by lazy {
"陕西省西安市"
}
val textView by lazy {
findViewById(R.id.textView) as TextView
}
网友评论