| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 第一行代码 (第三版) 第八,九,十章 -> 正文阅读 |
|
[移动开发]第一行代码 (第三版) 第八,九,十章 |
一: 泛型和委托1.泛型? ? ? ? 泛型类: ???????????????? class MyClass<T>{ ? ? ? ? ? ? ? ? ? ? ? ? fun method(param: T) : T { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return param ? ? ? ? ? ? ? ? ? ? ? ? } ????????????????} ? ? ? ? 泛型方法: ? ? ? ? ? ? ? ? class MyClass { ? ? ? ? ? ? ? ? ? ? ? ? fun <T> method(param: T ) :T???{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return param ????????????????????????} ????????????????} ? ? ? ? kotlin 允许对泛型的类型进行限制:指定上界的方式来对类型进行约束? ? ? ? ? ? ? ? class MyClass { ? ? ? ? ? ? ? ? ? ? ? ? fun <T : Number> method(param: T) : T{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return param ????????????????????????} ????????????????} ? ? ? ? 实例:apply? ? ? ? ? ? ? ? fun <T> T.builder (block: T.() -> Unit) : T { ? ? ? ? ? ? ? ? ? ? ? ? block() ? ? ? ? ? ? ? ? ? ? ? ? return this ????????????????}? ? ? ? ? ? ? ? 2.委托? ? ? ? 基本理念:操作对象自己不会去处理某段逻辑,而是把工作委托给另一辅助对象去处理 ? ? ? ? 类委托:by????????一个类的具体实现委托给另一个类去处理(大部分方法调用辅助对象的方法,少部分实现 ????????由自己来重写),Java中辅助对象方法必须每个重写,而kotlin提供了委托(by) ? ? ? ????????? java: 辅助对象方法必须每个重写? ? ? ? ? ? ? ? class MySet<T>(val helperSet : HashSet<T>) : Set<T>?{ ? ? ? ? ? ? ? ? ? ? ? ? override val size : Int get () = helperSet.size ????????????????????????override fun?contains(element : T)= helperSet.contais(element) ? ? ? ? ? ? ? ? ? ? ? ? ...... ? ? ? ? ? ? ? ? ? ? ? ? overide fun iterator() =?helperSet.interator() ????????????????} ? ? ? ????????? kotlin:只写 对某个方法的重新实现? ? ????????????????class MySet<T>(val helperSet : HashSet<T>) : Set<T> by helperSet {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fun helloWorld() = println("Hellp World") ? ? ? ? ? ? ? ? ? ? ? ? ? override fun isEmpty() = false ????????????????????????} ???????? ? ? ? ? 委托属性:? ? ? ? ? ? ? ? 将一个属性(字段)委托给另一个类去完成 ? ? ? ? ? ? ? ? class MyClass{ ? ? ? ? ? ? ? ? ? ? ? ? var p by Delegate() ????????????????} ? ? ? ? ? ? ? ? class Delegate { ? ? ? ? ? ? ? ? ? ? ? ? var propvalue : Any? = null ? ? ? ? ? ? ? ? ? ? ? ? operator fun getValue(myClass : MyClass, prop: KProperty<*>) : Any?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return propvalue ????????????????????????} ????????????????????????? operator fun setValue(myClass : MyClass, prop: KProperty<*>,value : Any?) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? propvalue = value ????????????????????????????????} ????????????????????????} 3.实现一个lazy函数? ? ? ? val p by lazy {} (代码块中的代码只会执行一次)? ? ? ? lazy实现原理:by 关键字,lazy高阶函数(lazy - Delegate - getValue - Lambda) ? ? ? ? 仿写:懒加载技术是不会对属性进行赋值的(Lambda,最后一行作为返回) ? ? ? ? ? ? ? ? class Later <T> (val block : () -> T){ ? ? ? ? ? ? ? ? ? ? ? ? var value : Any? = null ? ? ? ? ? ? ? ? ? ? ? ? operator fun getValue (any: Any?,prop:KProperty<*>): T{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (value == null){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? value = block() ????????????????????????????????} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return value as T ????????????????????????} ????????????????} ? ? ? ? 注意:later定义为顶层函数(不定义在任何类中的函数才是顶层函数) ? ? ? ? fun <T> later(block: () -> T) = Later(block) ? ? ? ? 使用: ? ? ? ? ? ? ? ? val uriMatcher by later{ ? ? ? ? ? ? ? ? ? ? ? ? val mathcher = UriMatcher (UriMatcher.NO_MATCH) ? ? ? ? ? ? ? ? ? ? ? ? matcher.addURI(authority,"book",bookDir) ????????????????????????matcher.addURI(authority,"book/#",bookItem) ????????????????????????matcher.addURI(authority,"category",categoryDir) ????????????????????????matcher.addURI(authority,"category/#",categoryItem) ? ? ? ? ? ? ? ? ? ? ? ? matcher ????????????????} 二:infix 函数? ? ? ? ? ? ? ? infix : 允许将我们调用函数时的小数点,括号等计算机相关的语法去掉????????????????????????(A to B)? ? ? ? ? ? ? ? 前提条件:? ? ? ? ? ? ? ? ? ? ? ? 1.infix 不能定义成顶层函数,必须是某个类的成员函数? ? ? ? ? ? ? ? ? ? ? ? 2.infix 函数必须接收且只能接收一个参数? ? ? ? ? ? ? ? 定义: ? ? ? ? ? ? ? ? infix fun String.beginWith(prefix: String) = startWith(prefix) ? ? ? ? ? ? ? ? 调用: ? ? ? ? ? ? ? ? if ("hello world" beginWith "hello"){ ????????????????} ? ? ? ? ? ? ? ?举例: ? ? ? ? ? ? ? ? ? ? ? ? 定义: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? infix fun <T> Collection<T>.has(element : T) = contains(element) ? ? ? ? ? ? ? ? ? ? ? ? 使用: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? val list = listOf{"Apple","Banana","Orange"} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if ( ? list has "Banana"){ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????????????} 三:泛型的高级特性1.实化??(T :: class.java)? ? ? ? 前提:? ? ? ? ? ? ? ? ? 1.inline 关键字 ? ? ? ? ? ? ? ? 2.reified 关键字 ? ? ? ? inline fun <reified T> getGenericType(){ ????????}? ? ? ? ? inline fun <reified T> getGenericType() = T :: class.java 2.应用(startActivity)? ? ? ? 定义: ? ? ? ? inline fun <reified T>startActivity(context :Context, block : Intent.() -> Unit?){ ? ? ? ? ? ? ? ? val intent = Intent(context, T :: class.java) ? ? ? ? ? ? ? ? intent.block() ? ? ? ? ? ? ? ? context.startActivity(intent) ????????} ? ? ? ? 使用: ? ? ? startActivity<MainActivity>(context){ ? ? ? ? ? ? ? ? putExtra("param1","data") ????????????????putExtra("param2",123) ????????} 3.协变4.逆变 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:52:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |