Kotlin 进阶 学习 委托

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://xiahunao.cn/news/2803740.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式学习笔记总结Day23----minshell项目总结

今天进行了linux系统高级编程io阶段学习的结尾&#xff0c;完成了一个minshell的小项目。 一、项目介绍 利用Linux中IO接口实现MiniShell&#xff0c;实现常用的shell指令的实现。 项目想要实现需要思考的地方有&#xff1a; 1.如何打印终端命令 2.如何接受终端命令 3.实现对…

windows前后端项目部署

装好windows虚拟机 1.远程连接 计算机右击属性&#xff0c;高级防火墙设置&#xff0c;远程连接服务允许 2.安装jdk,tomcat&#xff0c;解压工具 把安装包拖进去 双击安装解压软件 jdk安装 双击安装 配置环境变量&#xff08;复制jdk路径&#xff09; 计算机右击属性高级…

苹果分拣检测YOLOV8NANO

苹果分拣&#xff0c;可以检测成熟、切片、损坏、不成熟四种类型&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON 苹果分拣检测YOLOV8NANO&#xff0c;检测四种类型苹果

好用免费的项目管理工具

禅道 禅道 &#xff08; https://www.zentao.net/ &#xff09;是一款流行的项目管理和缺陷跟踪软件。它的主要功能包括项目管理、需求管理 、缺陷跟踪 、测试管理 、文档管理 、负载统计与报表 、自定义工作流 、访问控制与权限管理等。支持私有化部署&#xff0c;可完全控制…

代码随想录算法训练营第39天| Leetcode 62.不同路径、Leetcode 63. 不同路径 II

文章目录 Leetcode 62.不同路径Leetcode 63. 不同路径 II Leetcode 62.不同路径 题目链接&#xff1a;Leetcode 62.不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff0c;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总…

数通HCIE学员心得:跨界、转行,我在誉天开启人生新篇章

大家好&#xff0c;我是来自誉天的田同学。 我和誉天的故事开始于22年的8月份。毕业之后&#xff0c;由于对自身专业的不喜欢&#xff0c;我对未来感到非常迷茫。也就是这个时候&#xff0c;我接触到了誉天&#xff0c;开启了我的人生新篇章。 一开始我就想着要转行&#xff…

Project_Euler-14 题解

Project_Euler-14 题解 题目 思路 从暴力枚举出发&#xff0c;枚举100万以内的所有数字&#xff0c;对于每一个数&#xff0c;维护一个长度&#xff0c;每根据公式执行一次运算就加一。 最后取最大值。 暴力枚举代码 #include <stdio.h> #include <stdlib.h> #…

大数据 - Spark系列《十一》- Spark累加器详解

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

大型语言模型的语义搜索(一):关键词搜索

关键词搜索(Keyword Search)是文本搜索种一种常用的技术&#xff0c;很多知名的应用app比如Spotify、YouTube 或 Google map等都会使用关键词搜索的算法来实现用户的搜索任务&#xff0c;关键词搜索是构建搜索系统最常用的方法&#xff0c;最常用的搜索算法是Okapi BM25&#x…

【文件搜索项目】使用jdbc操作SQLite

一. 插入&#xff08;采用变量的方式插入&#xff09; 1.创建数据源.DateSource 2.建立连接 3.构造SQL语句 4.执行SQL语句 5.释放资源 public class TestSQLite {public static void main(String[] args) throws SQLException {textInsert();}public static void textInsert(…

超级抽象的前端2

vue3的调用方法失败的原因 function validateConfirm(rule, value, callback) {if (value ! form.password) {callback(new Error(两次输入的密码不一致))} else {callback()}function showAgreement() {dialogVisible.value true}function submitForm() {// 这里是提交表单的…

【RT-Thread基础教程】线程优先级、Tick与线程状态

文章目录 前言一、线程优先级1.1 线程优先级是什么1.2 设置优先级范围 二、时间片2.1 Tick是什么2.2 时间片是什么2.3 时间片轮转 三、线程状态3.1 线程有哪些状态3.2 完整的状态转换图 总结 前言 在 RT-Thread 操作系统中&#xff0c;线程的优先级、Tick 以及线程状态是非常重…

每日一练 | 华为认证真题练习Day187

1、关于BGP状态机描述错误的 A. IDIE状态下&#xff0c;BGP拒绝任何进入的连接请求&#xff0c;是BGP初始状态 B. ACTIVE状态下&#xff0c;BGP将尝试进行TCP连接的建立&#xff0c;是BGP的中间状态 C. ESTABLISHED状态下&#xff0c;BGP对等体间可以交换UPDATE报文&#xf…

算法--动态规划(背包问题)

这里写目录标题 总览dp问题的优化01背包问题概述算法思想算法思想中的注意点例题代码等效为一维数组 完全背包问题概述算法思想例题代码等效为二维数组等效为一维数组 多重背包问题概述算法思想例题代码优化&#xff08;采用二进制的方式&#xff09;基本思想时间复杂度例题代码…

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

2024年2月17日~2月23日周报

文章目录 一、前言二、DDNet架构学习2.1 数据预处理2.2 网络模型构建 三、基于深度学习地震数据去噪处理3.1 深度学习在地震数据去噪中的研究方向3.2 深度学习地震数据去噪流程3.2.1 数据集准备3.2.2 模型构建3.2.3 训练网络 3.3 基于DnCNN的地震数据去噪实验 四、小结4.1 存在…

前端项目打包体积分析与优化

一、安装依赖分析工具 npm install webpack-bundle-analyz 二、修改webpack.config.js文件 1、导入上面下载的包 2、在plugins里创建实例 三、启动打包命令 npm run build 会弹出如下界面&#xff1a; 四、优化 1、通过CDN导入react-dom文件 修改webpack.config.js文件里…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Linux环境非root用户配置SSH免密登录,并解决登录仍提示输入密码

Linux环境非root用户配置SSH免密登录&#xff0c;并解决登录仍提示输入密码 ssh免密登录的简单理解 以A和B进行举例&#xff1a;A免密登录B &#xff08;即在A服务器输入命令&#xff1a;ssh 非root用户名B的IP地址&#xff09;可以直接免密码直接登录 A生成私钥和公钥&#…

QT基本组件

四、基本组件 Designer 设计师&#xff08;重点&#xff09; Qt包含了一个Designer程序&#xff0c;用于通过可视化界面设计开发界面&#xff0c;保存文件格式为.ui&#xff08;界面文件&#xff09;。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建文件时&#xf…