前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )

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

作者头像
韩曙亮
发布2023-03-30 18:52:33
1.4K0
发布2023-03-30 18:52:33
举报

文章目录

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


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

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

代码语言:javascript
复制
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 方法 ;

代码语言:javascript
复制
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 方法示例 :

代码语言:javascript
复制
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)
}

执行结果 :

代码语言:javascript
复制
Tomy
Jackyy

三、计算属性


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

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

代码语言:javascript
复制
    val age
        get() = Math.random() * 100 // 每次获取都是 0 ~ 100 之间的随机值

代码示例 :

代码语言:javascript
复制
class Hello {
    val age
        get() = Math.random() * 100 // 每次获取都是 0 ~ 100 之间的随机值
}

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

执行结果 :

代码语言:javascript
复制
50.85408638021695
72.57119974253604
97.93840334836116
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、Kotlin 自动为成员字段生成 getter 和 setter 方法
  • 二、手动设置成员的 getter 和 setter 方法
  • 三、计算属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档