Kotlin 中的 by lazy

本文介绍了Kotlin中的by lazy特性,详细讲解了委托模式的概念,并通过代码示例展示了如何使用by lazy实现属性的延迟加载。此外,还讨论了lazy的线程安全和不同初始化模式,以及在Android开发中的应用。
摘要由CSDN通过智能技术生成

Kotlin 中的 by lazy

今天讲下Kotlin中的 by lazy (不想看废话的 直接往下拉 直奔主题)

前言

再讲By lazy前 我们先说说 委托模式

**委托模式(delegation pattern)**是软件设计模式中的一项基本技巧。在委托模式中,**有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。**委托模式是一项基本技巧,许多其他的模式,如状态模式策略模式访问者模式本质上是在更特殊的场合采用了委托模式委托模式使得我们可以用聚合来替代继承,它还使我们可以模拟mixin

还是有点模糊? 上例子

class People {
   
    fun sayHello() {
   
        println("Hello World")
    }
}

class Student {
   
    fun sayHello() {
   
        People().sayHello()
    }
}

fun main() {
   
    Student().sayHello()
}

Hello World 

这就是应该最简单的委托模式了 Main调用StudentsayHello方法时 Student 拥有People的实例 将SayHello委托给People的SayHello的方法去执行。

是不是觉得很简单 觉得自己又行了? 棒棒

正文开始

现在切到Kotlin中的委托 他分为两种 一种是属性委托 一种是类委托

  1. 类委托

    下面代码的2个问题

    • 在Kotlin中 by 是委托的关键字 lazy 并不是关键字而表达式 下面会讲到
    • 认真的你 发现了为什么 Derived 不用实现print方法

    通过打印你发现 创建实例 BaseImpl 给他传入 10 并且把这个实例传给了 Derived 打印结果就对应上了

    没错 这就是委托 因为 BaseImpl也实现了 Base那么 Derived 就委托 BaseImpl 执行对应的方法。实际和我们的第一段例子是一样的 只不过Kotlin的语法糖 让我们连方法都省略了 代码变得更简单了

    interface Base {
         
        fun print()
    }
    
    class BaseImpl(val x: Int) : Base {
         
        override fun print() {
          print(x) }
    }
    
    class Derived(b: Base) : Base by b
    
    fun main() {
         
        val b = BaseImpl(10)
        Derived(b
  • 20
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值