【2023】Kotlin教程 第二篇 面向对象与函数式编程 第10章 面向对象编程 10.4 属性 10.4.5 惰性加载属性

【2023】Kotlin教程

在这里插入图片描述

第二篇 面向对象与函数式编程

第10章 面向对象编程

Kotlin语言目前还是以面向对象编程为主,函数式编程为辅。面向对象是Kotlin是重要的特性之一。

10.4 属性

属性是为了方便访问封装后的字段而设计的,属性本身并不存储数据,数据是存储在**支持字段(backing field)**中的。

【提示】Kotlin中属性可以在类中声明,称为成员属性。属性也可以在类之外,类似于顶层函数,称为顶层属性,事实上顶层属性就是全局变量

10.4.5 惰性加载属性

实际开发中自己声明委托属性很少使用,而是通过使用Kotlin标准库中提供的一些委托属性,如:惰性加载属性和可观察属性。

惰性加载属性与延迟初始化属性类似,只有第一次访问该属性时才进行初始化。不同的是惰性加载属性使用的lazy函数声明委托属性,而延迟初始化属性lateinit关键字修饰属性。还有惰性加载属性必须是val的,而延迟初始化属性必须是var的

举个栗子:

员工类:

open class Employee {

    var no: Int = 0 // 员工编号属性
    var firstName: String = "Tony"
    var lastName: String = "Guan"

    val fullName: String by lazy {
        firstName + "." + lastName
    }

    lateinit var dept: Department

}

部门类:

class Department {

    var no: Int = 0 // 部门编号属性

    var name: String = "" // 部门名称属性

}

主函数:

fun main() {

    val emp = Employee()
    println(emp.fullName)

    val dept = Department()
    dept.no = 20
    emp.dept = dept

    println(emp.dept.no)
}

在这里插入图片描述

上述代码 val fullName: String by lazy { firstName + "." + lastName } 声明了的惰性加载属性fullName,by后面是Iazy函数,注意Iazy不是关键字,而是函数。Iazy函数后面跟着的是尾随Lambda表达式。惰性加载属性使用val声明。

代码lateinit var dept: Department声明了延迟初始化属性dept,使用关键字lateinit。延迟初始化属性使用var声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ding Jiaxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值