委托-kotlin

电路保护设计实战:保险丝选型、I²t计算与多级协同方案 电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保 阅读详情

目录

一、委托概念

二、类委托

三、属性委托

四、标准委托

五、延迟属性 Lazy


一、委托概念

委托模式已经证明是实现继承的一个很好的替代方式, 而 Kotlin 可以零样板代码地原生支持它。

委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。

Kotlin 直接支持委托模式,更加优雅,简洁。Kotlin 通过关键字 by 实现委托。

二、类委托

类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。
以下实例中派生类 Derived 继承了接口 Base 所有方法,并且委托一个传入的 Base 类的对象来执行这些方法。

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).print()
}

在 Derived 声明中,by 子句表示,将 b 保存在 Derived 的对象实例内部,而且编译器将会生成继承自 Base 接口的所有方法, 并将调用转发给 b。

三、属性委托

属性委托指的是一个类的某个属性值不是在类中直接进行定义,而是将其托付给一个代理类,从而实现对该类的属性统一管理。
属性委托语法格式:

val/var <属性名>: <类型> by <表达式>
var/val:属性类型(可变/只读)
属性名:属性名称
类型:属性的数据类型
表达式:委托代理类

by 关键字之后的表达式就是委托, 属性的 get() 方法(以及set() 方法)将被委托给这个对象的 getValue() 和 setValue() 方法。属性委托不必实现任何接口, 但必须提供 getValue() 函数(对于 var属性,还需要 setValue() 函数)。
定义一个被委托的类
该类需要包含 getValue() 方法和 setValue() 方法,且参数 thisRef 为进行委托的类的对象,property 为进行委托的属性的对象。

import kotlin.reflect.KProperty
// 定义包含属性委托的类
class Example {
    var p: String by Delegate()
}

// 委托的类
class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "$thisRef, 这里委托了 ${property.name} 属性"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("$thisRef 的 ${property.name} 属性赋值为 $value")
    }
}
fun main(args: Array<String>) {
    val e = Example()
    println(e.p)     // 访问该属性,调用 getValue() 函数

    e.p = "Runoob"   // 调用 setValue() 函数
    println(e.p)
}
输出结果为:
Example@433c675d, 这里委托了 p 属性
Example@433c675d 的 p 属性赋值为 Runoob
Example@433c675d, 这里委托了 p 属性

作者:哈哈_defb
链接:https://www.jianshu.com/p/a70ba6436e75/
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

四、标准委托

Kotlin 的标准库中已经内置了很多工厂方法来实现属性的委托。

五、延迟属性 Lazy

lazy() 是一个函数, 接受一个 Lambda 表达式作为参数, 返回一个 Lazy <T> 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lamda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。

(四)C++自制植物大战僵尸游戏启动流程 鼠标左键单机VS2022上方工具栏中进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电脑需要消耗的时间差别可能较大,通常在几分钟到几十分钟之间。编译成功后会自动启动运行游戏。qi编译成功后自动启动运行游戏如下图。 阅读详情

相关推荐

Ubuntu系统下搭建QtCreator开发环境详细过程(Qt简介;Linux下安装QtCreator;Ubuntu安装后闪退蓝屏的解决方法)

Qt 是一个跨平台的 C++开发库。主要用来开发图形用户界面 (Graphical User Interface,简称 GUI) 程序。Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix、智能手机系统Android、ios、WinPhone, 嵌入式系统 QNX、VxWorks 等。

分享学习成长历程,Winter is coming! 8556

Kotlin 委托

Kotlin委托是一种强大的语言特性,通过by关键字支持委托模式。分为类委托和属性委托两种形式:类委托将接口实现交给其他对象,减少样板代码;属性委托将属性的访问修改逻辑委托给其他对象,支持懒加载、可观察等特性。内置委托包括直接委托、懒加载、可观察属性和映射属性等,能够简化代码并提高可维护性。委托模式强调任务的专业分工,与代理模式的身份代表有所不同。通过委托,Kotlin实现了更灵活、简洁的代码组织方式。

xiangxiongfly 1897

从寄存器配置到G值:一份给STM32开发者的SC7A20加速度数据换算保姆级指南

本文为STM32开发者提供SC7A20三轴加速度传感器的数据换算保姆级指南,详细解析从寄存器配置到G值转换的全过程。涵盖量程选择、输出值换算原理及优化代码实现,帮助开发者快速掌握加速度数据的物理意义转换技巧,提升运动感知系统开发效率。

weixin_29172963的博客 172

【Kotlin小技巧】委托的使用场景和开发小技巧

Kotlin的委托一般有两种使用方式: * 类委托,把类的功能委托到其他类中。 * 属性委托,把某个域委托到一个类封装起来。 而本次就举几个小例子来助力更好地整理架构和开发。

datian1234的博客 687

LightGBM处理类别特征和缺失值有多省心?一个真实业务数据案例带你上手

本文通过真实电商数据案例,详细解析了LightGBM如何高效处理类别特征和缺失值。相比传统方法,LightGBM仅需一行代码即可自动处理高基数类别特征和缺失值,大幅提升模型训练效率和预测准确度,特别适合业务场景中的脏数据处理。

weixin_30689307的博客 460

ROS学习【11】-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真(camera、kinect、Lidar),并通过Rviz进行数据显示

ROS学习-----基于ubuntu16.04上Gazebo机器人环境搭建的传感器仿真目录一、Gazebo环境搭建前的准备1、将搭建模型下载到我们的gazebo环境下2、升级我们的gazebo版本二、创建配置launch文件参数的world文件1、进入工程包mbot_gazebo2、创建文件夹worlds3、进入该文件夹4、创建playground.world文件5、创建room.world文件三...

qq_42451251的博客 3608

Kotlin委托

委托在Kotlin中占有很重要的应用,特别是属性委托比如lazy延迟初始化使用。委托模式是一项技巧,其他的几种设计模式如:策略模式、状态模式和访问者模式都是委托模式的具体场景应用。by关键字是一种约定,是对委托类的方法的约定,就是简化函数调用。这里的by约定简化了属性的get和set方法的调用,当然委托类需要定义相应的函数:getValue,setValue。...

城主的专栏 988

Ubuntu 24.04 安装 ROS2 Jazzy

手把手教你在Ubuntu24.04上安装JazzyROS2操作系统。

weixin_74185504的博客 1万+

kotlin 委托

CreateDB类需要实现的接口(DB)方法委托给了具体实现类(MySql、OracleDB、SqliteDB)来实现,我认为这和设计模式中的策略模式如出一辙。Tools -> kotlin -> show kotlin Bytecode ,然后点Decompile,将字节码进行反编译得到java代码。让我们稍感惊讶的是,经过转换后甚至都没有定义num这个属性,只是增加了getNum和setNum两个方法来获取和改变floatValue的值。通过委托封装Mmkv存取值的过程。上,因此会有上面的运行结果。

qq_27246079的博客 1317

自建 HTML获取腾讯六宫格点选图片验证码素材,实现刷新批量获取图片方便训练

通过自建 HTML 页面,可以方便地获取腾讯六宫格二维码素材,不仅过程简单,而且可以灵活配置各种参数。希望这篇文章能帮助到需要相关素材的小伙伴。如果你有其他问题或者更好的方法,欢迎留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 487

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

Kotlin委托的使用和原理

委托就是一种通过将实际工作交给其他对象来实现的设计模式;kotlin给我们提供了by关键词实现委托.

Eqiqi的博客 1182

29、Power BI 中行级安全(RLS)的实现与应用

本文详细介绍了在Power BI中实现行级安全(RLS)的方法,包括静态RLS和动态RLS的实现流程、适用场景及对比分析。通过具体业务场景,展示了如何创建安全角色、定义规则、验证角色、发布模型以及分配成员。此外,还探讨了更复杂的动态RLS场景,如基于父子层次结构的数据访问控制和从外部源获取用户信息的实现方式。文章最后总结了最佳实践建议及未来发展趋势,为企业在Power BI中高效、安全地实施数据访问控制提供了全面指导。

terraform7cloud的博客 195

Kotlin 类委托与属性委托

介绍委托模式、Kotlin的委托机制:类委托以及属性委托

weixin_42643321的博客 1325

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Kotlin->Kotlin委托

读写委托者MyPrincipal@2cdf8d8a 修改 代理者MyReadWriteProperty@30946e09 属性名 intValue2 = 27。读写委托者MyPrincipal@2cdf8d8a 读取 代理者MyReadWriteProperty@30946e09 属性名 intValue2。委托者Principal@69d0a921 读取 代理者Delegate@506c589e 属性名 intValue。{this} 属性名 ${property.name}”)

2401_87029945的博客 1214

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Kotlin之委托

Kotlin之委托笔记

七夜聖君的博客 1329

Kotlin 委托详解,从第一性原理讲解 Kotlin 委托

Kotlin 委托详解

weixin_43199379的博客 1093

kotlin 实战之委托总结

工匠若水可能会迟到,但是从来不会缺席,最终还是觉得将自己的云笔记分享出来吧 ~ 特别说明,kotlin 系列文章均以 Java 差异为核心进行提炼,与 Java 相同部分不再列出。随着 kotlin 官方版本的迭代,文中有些语法可能会发生变化,请务必留意,语言领悟精髓即可,差异只是语法层面的事情,建议不要过多关注。 类委托 类委托原理:by 关键字后面的对象实际会被存储在类的内部,编译器则会将父接口的所有方法实现出来,并且将其转移给委托对象去执行。 //定义一个接口 interface InterfaceB

工匠若水 8022

Kotlin中的委托

这么说确实没错,但如果我们只是让大部分的方法实现调用辅助对象中的方法,少部分的方法实现由自己来重写,甚至加入一些自己独有的方法,那么。但是这种写法也有一定的弊端,如果接口中的待实现方法比较少还好,要是有几十甚至上百个方法的话,每个都去这样调用辅助对象中的相应方法实现,那可真是要写哭了。接口所有的方法实现中,都没有进行自己的实现,而是调用了辅助对象中相应的方法实现,这其实就是一种委托模式。另外,必须说明的是,虽然我们编写了一个自己的懒加载函数,但由于简单起见,这里只是大 致还原了。...

xingyu19911016的博客 3160

【Kotlin -- 知识点】Kotlin 中的委托

委托,也就是委托模式,它是23种经典设计模式种的一种,又名代理模式,在委托模式中,有2个对象参与同一个请求的处理,接受请求的对象将请求委托给另一个对象来处理。

Kevin Learn Android 2161

搞懂Kotlin委托

前面也说了属性委托是将一个属性的具体实现委托给另一个类去完成。那么属性把什么委托了出去,被委托类又有哪些实现呢?其实,属性委托出去的是其set/get方法,委托给了被委托类的方法。// 属性的get/set方法get() {}// 委托后注意这里prop声明的是var,即可变变量,如果委托给Delegate类的话,则必须实现getValue()和setValue()这两个方法,并且都要使用operator关键字进行声明。= null) {

老皮的博客 1910

Kotlin委托详解

Kotlin委托特性通过by关键字实现类委托和属性委托,提升代码复用与可维护性。类委托将接口实现转发给其他对象,遵循组合优于继承原则;属性委托将属性访问逻辑委托给专门对象,支持懒加载、观察等常见模式。自定义委托需实现ReadOnlyProperty或ReadWriteProperty接口,编译器会自动生成委托对象和方法调用。委托通过thisRef获取宿主对象,property获取属性元数据,实现上下文感知操作。该特性减少了样板代码,使关注点分离更清晰,是Kotlin提升开发效率的重要特性。

weixin_68781269的博客 1249

kotlin委托:,委托属性,属性委托,委托类,Delegation,Delegated properties

Kotlin中的by关键字用于实现委托模式,主要分为两类:类/接口委托和属性委托。类委托通过by将接口实现委托给另一个对象,减少模板代码。属性委托则通过by将属性的读写操作委托给其他对象,支持多种标准委托方式: 属性转发:将属性委托给另一个属性,常用于字段重命名 懒加载:使用lazy实现首次访问时才初始化的特性 可观察属性:通过Delegates.observable监听属性变化 可否决变更:使用Delegates.vetoable拦截并决定是否接受新值 相比Java的手动委托,Kotlin的委托模式更简洁

Huang兄 1104
上一篇: IOS-App开发常用三方框架整理 (Swift版本)
下一篇: 编程语言核心
黄毛火烧雪下
黄毛火烧雪下 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 7714粉丝 439原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

黄毛火烧雪下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值