一、Getter()与Setter()
class Test{
/*
* getter 和 setter是可选的
*/
// 当用var修饰时,必须为属性赋默认值(特指基本数据类型,因为自定义的类型可以使用后期初始化属性) 即使在用getter()的情况下,不过这样写出来,不管我们怎么去改变其值,其值都为`123`
var test1 : String = ""
get() = "123"
set(value){field = value}
// 用val修饰时,用getter()函数时,属性可以不赋默认值。但是不能有setter()函数。
val test2 : String
get() = "123" // 等价于:val test2 : String = "123"
}
在上面的代码中出现了set(value){field = value}这样的一句代码。其中value是Koltin写setter()函数时其参数的约定俗成的习惯。你也可以换成其他的值。而field是指属性本身。
2.1、自定义
例1:用val修饰的属性自定义情况
class Mime{
// size属性
private val size = 0
// 即isEmpty这个属性,是判断该类的size属性是否等于0
val isEmpty : Boolean
get() = this.size == 0
// 另一个例子
val num = 2
get() = if (field > 5) 10 else 0
}
// 测试
fun main(args: Array<String>) {
val mime = Mime()
println("isEmpty = ${mime.isEmpty}")
println("num = ${mime.num}")
}
//输出结果为:
isEmpty = true
num = 0
例2:用var修饰的属性自定义情况
class Mime{
var str1 = "test"
get() = field // 这句可以省略,kotlin默认实现的方式
set(value){
field = if (value.isNotEmpty()) value else "null"
}
var str2 = ""
get() = "随意怎么修改都不会改变"
set(value){
field = if (value.isNotEmpty()) value else "null"
}
}
// 测试
fun main(args: Array<String>) {
val mime = Mime()
println("str = ${mime.str1}")
mime.str1 = ""
println("str = ${mime.str1}")
mime.str1 = "kotlin"
println("str = ${mime.str1}")
println("str = ${mime.str2}")
mime.str2 = ""
println("str = ${mime.str2}")
mime.str2 = "kotlin"
println("str = ${mime.str2}")
}
输出结果为
str = test
str = null
str = kotlin
str = 随意怎么修改都不会改变
str = 随意怎么修改都不会改变
str = 随意怎么修改都不会改变