文章目录

  • ​​一、Kotlin 自动为成员字段生成 getter 和 setter 方法​​
  • ​​二、手动设置成员的 getter 和 setter 方法​​
  • ​​三、计算属性​​






一、Kotlin 自动为成员字段生成 getter 和 setter 方法



定义 Kotlin 类 , 在 类中 定义成员属性 , 会自动生成 getter 和 setter 方法 ;



在 Kotlin 中定义如下类 , 在其中定义两个字段 :

class Hello {
var name = "Tom"
var age = 18
}

然后双击 Shift 选择 " Show Kotlin Bytecode " ,

【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )_setter

在 Kotlin Bytecode 界面 , 点击 " Decompile " 按钮 , 将 字节码 数据 反编译回 Java 代码 ;

【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )_getter_02


将 字节码数据 反编译后的 Java 代码中 , 存在 name 和 age 成员的 getter 和 setter 函数 ;

【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )_android_03

调用 ​​hello.name​​​ 方法 , 实际上调用的是 ​​hello.setName​​ 方法 ;

class Hello {
var name = "Tom"
var age = 18
}

fun main() {
var hello = Hello()
hello.name = "Jack"
}

查看其 字节码 数据 反编译后的 结果 如下 :

【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )_setter_04






二、手动设置成员的 getter 和 setter 方法



Kotlin 会为 类中的每个 成员属性 生成一个setter ;

field 用于存储 属性数据 , 是由 Kotlin 自动进行定义封装的 , 只有在 getter 和 setter 函数中才能调用 field ;



手动定义 getter 和 setter 方法示例 :

class Hello {
var name = "Tom"
get() {
return field + "y"
}
set(value) {
field = value + "y"
}
}

fun main() {
var hello = Hello()
println(hello.name)

hello.name = "Jack"
println(hello.name)
}

执行结果 :

Tomy
Jackyy






三、计算属性



如果 Kotlin 类中的 某个属性 是 通过计算得到的 , 可以 在该属性的 getter 和 setter 方法中进行计算设置或获取结果

下面的 age 属性就是通过计算得到的属性值 , 每次获取都是 0 ~ 100 之间的随机值 , 没有使用到 field ;

val age
get() = Math.random() * 100 // 每次获取都是 0 ~ 100 之间的随机值



代码示例 :

class Hello {
val age
get() = Math.random() * 100 // 每次获取都是 0 ~ 100 之间的随机值
}

fun main() {
var hello = Hello()
println(hello.age)
println(hello.age)
println(hello.age)
}

执行结果 :

50.85408638021695
72.57119974253604
97.93840334836116