Kotlin 进阶 学习 委托

news/发布时间2024/5/15 16:00:32

1.接口委托

package com.jmj.jetpackcomposecompositionlocal.byStudy/*** 接口委托*/
interface HomeDao{fun getAllData():List<String>
}interface ADao{fun getById(id:Int):String
}class HomeDaoImpl:HomeDao{override fun getAllData(): List<String> {return listOf("home")}}
class ADaoImpl:ADao{override fun getById(id: Int): String {return "object id = $id"}}
//这里多态也可以
class HomeService(homeDaoImpl: HomeDaoImpl,aDao: ADao):HomeDao by homeDaoImpl,ADao by aDao{fun getRedisData():String{return "redis"}
}fun main() {val homeService = HomeService(HomeDaoImpl(),ADaoImpl())val allData = homeService.getAllData()println(allData)println(homeService.getById(3))
}

2.属性委托

package com.jmj.jetpackcomposecompositionlocal.byStudyimport kotlin.properties.ReadOnlyProperty
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KPropertyfun main() {var test:String  by MyTestClass()test="123"println(test)
}//如果是只读变量 委托 就实现 ReadOnlyProperty 接口
//<第一个类型是我们属性所属的那个类,第二个类型是我们属性本身的类型>
class MyTestClass:ReadWriteProperty<Nothing?,String>{private  var myVar = ""override fun getValue(thisRef: Nothing?, property: KProperty<*>): String {println("调用了get方法")return myVar}override fun setValue(thisRef: Nothing?, property: KProperty<*>, value: String) {println("调用了set方法")myVar = value}}
package com.jmj.jetpackcomposecompositionlocal.byStudyimport kotlin.properties.ReadOnlyProperty
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KPropertyfun main() {A().apply {this.aTest = "hello"println(aTest)}
}class A{var aTest:String by MyTestClass()
}class B{var aTest:String by MyTestClass()
}
//如果是只读变量 委托 就实现 ReadOnlyProperty 接口
//<第一个类型是我们属性所属的那个类,第二个类型是我们属性本身的类型>
class MyTestClass:ReadWriteProperty<Any,String>{private  var myVar = ""override fun getValue(thisRef: Any, property: KProperty<*>): String {return myVar}override fun setValue(thisRef: Any, property: KProperty<*>, value: String) {myVar =value}}

3.延迟委托

package com.jmj.jetpackcomposecompositionlocal.byStudyfun main() {val test by lazy{println("初始化了test")"hello"}println(test)
}

4.监听委托

package com.jmj.jetpackcomposecompositionlocal.byStudyimport kotlin.properties.Delegatesfun main() {var test by Delegates.observable("hello"){_, oldValue, newValue ->println("oldValue $oldValue")println("newValue $newValue")}test = "TEAt"test = "TEAt"test = "TEAt"println(test)println(test)println(test)println(test)println(test)
}

 实际上还是实现了ReadWriteProperty这个接口来实现监听委托

Jetpack compose 里的状态 也是 委托实现 重构 compose。

就是 Mutable 返回一个 状态对象 这个对象里的属性 被另一个类委托了,这个属性调用了 set方法

就会委托去调用委托类的set方法,然后在那个实现方法里去实现compose组件重构,完成页面渲染。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/Nuea/4449.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

新手学习Cesium的几点建议

Cesium是当前非常火热的三维数字地球开发框架&#xff0c;很多公司基于Cesium做项目以及形成了自己的产品&#xff0c;关于Cesium的学习&#xff0c;有诸多网站、书籍、学习资料甚至培训教材&#xff0c;这里不再详细推荐&#xff0c;从学习Cesium的角度&#xff0c;资料和教程…

亿道丨三防平板丨加固平板丨为零售业提供四大优势

随着全球经济的快速发展&#xff0c;作为传统行业的零售业也迎来了绝佳的发展机遇&#xff0c;在互联网智能化的大环境下&#xff0c;越来越多的零售企业选择三防平板电脑作为工作中的电子设备。作为一种耐用的移动选项&#xff0c;三防平板带来的不仅仅是坚固的外壳。坚固耐用…

车载电子电器架构 —— 车辆模式管理

车载电子电器架构 —— 车辆模式管理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的…

Python实战:xlsx文件的读写

Python实战&#xff1a;xlsx文件的读写 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅和支持~ &#…

Linux进程【补充】

文章目录 进程概念task_struct 进程创建forkvfork写时拷贝 进程状态僵尸进程孤儿进程守护进程 进程地址空间是什么为什么怎么做 进程概念 进程是一个程序的执行实例或者是担当系统资源分配的实体。当一个程序运行时&#xff0c;被从硬盘加载到内存中&#xff0c;操作系统为每个…

电脑wifi丢失修复

当你打开电脑突然发现wifi功能不见了&#xff0c;可以先查看一下网卡的状态 在控制面板中找到设备管理器&#xff0c;打开就能找到网络适配器&#xff0c; 我这里是修复过的&#xff0c;wifi丢失后这里可能会显示WALN是丢失的&#xff0c;其他项显示黄色感叹号。 如何修复呢…

LaTex和Word中推荐使用的矢量图片格式

1、LaTex 推荐使用eps矢量格式。&#xff08;该格式直接放在word中不会显示&#xff0c;但是通过插入word后双击打开查看 2、Word 推荐使用svg矢量格式。该格式可以直接插入word中。 3、plt保存代码 import matplotlib.pyplot as plt# 绘制图形 x [1, 2, 3, 4, 5] y1 [1…

RandAugment(NeurIPS 2020)论文速读

paper&#xff1a;RandAugment: Practical automated data augmentation with a reduced search space third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/datasets/transforms/auto_augment.py 存在的问题 自动增强策…

《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)

文章目录 3.1 编写 Dockerfile3.1.1 重点基础知识3.1.2 重点案例&#xff1a;创建简单 Python 应用的 Docker 镜像3.1.3 拓展案例 1&#xff1a;Dockerfile 优化3.1.4 拓展案例 2&#xff1a;多阶段构建 3.2 构建流程深入解析3.2.1 重点基础知识3.2.2 重点案例&#xff1a;构建…

ArcgisForJS如何在线编辑ArcGIS Server发布的几何要素?

文章目录 0.引言1.ArcGIS创建几何要素2.ArcGIS Server发布几何要素3.ArcgisForJS在线编辑ArcGIS Server发布的几何要素 0.引言 ArcGIS For JS 是一种用于创建和编辑地理信息的 JavaScript 库&#xff0c;它允许用户在线编辑 ArcGIS Server 发布的几何要素。本文从ArcGIS创建几…

MATLAB环境下一维时间序列信号的欠定盲源分离方法

在酒会上会有多种声音&#xff0c;如酒杯碰撞的声音、朋友之间聊天的声音、会场中音乐的声音等&#xff0c;这些声音混叠起来使我们难以得到我们感兴趣的声音信号&#xff0c;怎样获得我们想要得到的声音信号&#xff0c;这就是盲源分离BSS研究上的最经典问题“鸡尾酒会”问题。…

sentinel整合nacos在gateway中实现限流

sentinel整合nacos在gateway中实现限流 一、应用层面完成网关整合nacos和sentinel实现限流 前沿 启动nacos与sentinel的jar的启动&#xff0c;这里不细讲 sentinel官网 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 sentinel 下载地址 https://github.com/…

Linux-基础知识(黑马学习笔记)

硬件和软件 我们所熟知的计算机是由&#xff1a;硬件和软件组成。 硬件&#xff1a;计算机系统中电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 软件&#xff1a;是用户和计算机硬件之间的接口和桥梁&#xff0c;用户通过软件与计算机进行交流。 而操作系统…

代码随想录算法训练营第三天

● 自己看到题目的第一想法 203.移除链表元素 方法一&#xff1a; 思路&#xff1a; 设置虚拟头节点 dummyhead 设置临时指针 cur 遍历 整个链表 循环&#xff1a; 如果 cur !nullptr &&cur->next !nullptr 则 遍历链表 否则结束遍历 如果 cur->next val 则…

TestNG与ExtentReport单元测试导出报告文档

TestNG与ExtentReport集成 目录 1 通过实现ITestListener的方法添加Reporter log 1.1 MyTestListener设置 1.2 输出结果 2 TestNG与ExtentReporter集成 2.1 项目结构 2.2 MyExtentReportListener设置 2.3 单多Suite、Test组合测试 2.3.1 单Suite单Test 2.3…

C++ Primer Plus 笔记(持续更新)

编译器的正解 数据&#xff0b;算法程序 赋值从右向左进行 cin&#xff0c;cout的本质也是对象 类和对象的解释

Jmeter内置变量 vars 和props的使用详解

JMeter是一个功能强大的负载测试工具&#xff0c;它提供了许多有用的内置变量来支持测试过程。其中最常用的变量是 vars 和 props。 vars 变量 vars 变量是线程本地变量&#xff0c;它们只能在同一线程组内的所有线程中使用&#xff08;线程组内不同线程之间变量不共享&#…

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的&#xff0c;如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示&#xff1a; HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …

Android13 编译ninja failed with: exit status 137

描述 现象很奇怪&#xff0c;主机是ubuntu 18.04&#xff0c; 内存有32G&#xff0c;并且系统中有两份Android13代码&#xff0c; 有一份编译正常&#xff0c;另外一份编译不正常&#xff0c;一度以为是因为下载源码不齐全导致&#xff0c;后面仔细看日志&#xff0c;原来是内…

Automated Testing for LLMOps 01:使用CircleCI进行持续集成CI

Automated Testing for LLMOps 这是学习https://www.deeplearning.ai/short-courses/automated-testing-llmops/ 这门课的笔记 Learn how LLM-based testing differs from traditional software testing and implement rules-based testing to assess your LLM application. …
推荐文章