【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )
2023-06-13 09:18:07 时间
文章目录
一、Kotlin 自动为成员字段生成 getter 和 setter 方法
定义 Kotlin 类 , 在 类中 定义成员属性 , 会自动生成 getter 和 setter 方法 ;
在 Kotlin 中定义如下类 , 在其中定义两个字段 :
class Hello {
var name = "Tom"
var age = 18
}
然后双击 Shift 选择 " Show Kotlin Bytecode " ,
在 Kotlin Bytecode 界面 , 点击 " Decompile " 按钮 , 将 字节码 数据 反编译回 Java 代码 ;
将 字节码数据 反编译后的 Java 代码中 , 存在 name 和 age 成员的 getter 和 setter 函数 ;
调用 hello.name
方法 , 实际上调用的是 hello.setName
方法 ;
class Hello {
var name = "Tom"
var age = 18
}
fun main() {
var hello = Hello()
hello.name = "Jack"
}
查看其 字节码 数据 反编译后的 结果 如下 :
二、手动设置成员的 getter 和 setter 方法
Kotlin 会为 类中的每个 成员属性 生成一个 field , getter , 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 方法中进行计算设置或获取结果 , 不使用 field 属性 ;
下面的 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
相关文章
- Java 并发编程中的死锁 ( Kotlin 语言讲解)
- kotlin 使用viewStub
- 基于kotlin开发的验证码发送注册的app
- 【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
- 【Kotlin 协程】协程启动 ④ ( 协程启动模式 | 协程构建器启动模式参数 | DEFAULT 模式 | ATOMIC 模式 | LAZY 模式 | UNDISPATCHED 模式 )
- 【Kotlin 协程】Flow 流展平 ( 连接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )
- 【Kotlin 协程】Channel 通道 ③ ( CoroutineScope#produce 构造生产者协程 | CoroutineScope#actor 构造消费者协程 )
- 【Kotlin 协程】Channel 通道 ④ ( Channel 通道的热数据流属性 | Channel 通道关闭过程 | Channel 通道关闭代码示例 )
- 【Kotlin】Kotlin 变量与常量 ( 变量声明 | 只读变量 | 类型推断 | 编译时常量 | Kotlin 字节码查看面板 | Kotlin 引用数据类型 )
- 【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )
- 【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )