IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 泛型和委托——kotlin -> 正文阅读

[移动开发]泛型和委托——kotlin

泛型

泛型是神马

  • 指定数据的具体类型,是String还是Int,还是其他类

泛型类

class MyClass<T>{
	fun method(param : T){
		return param
	}
}
  • 党委们调用上面MyClass类的是时候,可以将泛型指定成具体的类型,eg

    val myClass = MyClass<Int>()
    val result = myClass.method(123)
    
  • 这样子method的参数类型就被指定成为Int类型,泛型泛型,体现它的泛,即多变,传啥就变啥。

泛型方法

写法注意
  • 将泛型结构写在方法前面即可
class MyClass{
	fun <T>method(param: T):T{
		return param
	}
}
调用
val myClass = MyClass()
val result = myClass.method<Int>(123)

kotlin优秀的推导机制

val myClass = MyClass()
val result = myClass.method(123)	

泛型的特点

上下界约束
  • 当然有着像java泛型的上下界约束 <T: Number> 指定了该泛型类型只能是Int,Float,Double等数字类型

  • 默认上界为 Any?

委托

是什么

  • 委托是一种设计模式, 它的理念是操作对象自己不会处理某段逻辑,而是会把工作委托给另一个辅助对象去处理。

类委托

将一个类的具体实现委托给另一个类去完成

看看委托模式实现的一个小类

class MySet<T>(val helperSet: HashSet<T>):Set<T>{
	override val size:Int
		get() = helperSet.size
	override fun contains(element:T) = helperSet.contains(element)
	..............
	override fun iterator() = helperSet.iterator()
}
  • 以上借助helperSet(辅助对象)参数去实现MySet,这就是一种委托模式
问题所在:
  • ? 如果需要实现这个接口的函数特别多,每个函数都用相应的辅助对象去实现,写到肾虚。

委托的功能

使用

关键字by ,在接口后面使用by关键字,再接上受委托的辅助对象,可以免去实现的那一大堆方法

class MySet<T>(val helperSet: HashSet<T>):Set<T> by helperSet{

}

留意以上by helperSet

这样子想实现哪一个方法就可以实现哪一个方法。

class MySet<T>(val helperSet: HashSet<T>):Set<T> by helperSet{
	fun helloWorld() = println("你好世界")
	override fun isEmpty() = false//逻辑是错误,格式正确,仅仅展示而已
}

委托属性

将一个属性(字段)的具体实现委托给另一个类去实现

eg

class MyClass{
	var p by Delegate()
}
  • 将p的属性委托给右边的Delegate类去完成。

给了Delegate,那么它是怎么让p得到值和获取值呢

+class MySet(val helperSet: HashSet):Set by helperSet{

————调用p的属性时自动调用Delegate 的getValue() ,设置p的属性的时候自动调用Delegate的setValue()

实现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
	}
}
  • getValue的两个参数解释 ,
    • 第一个参数是 用于声明该Delegate类的委托功能可以再什么类中使用 (指定什么类用这委托功能)
    • 第二个参数是 KProperty<*>是Kotlin中的一个属性操作类,用于获取各种属性的相关值
      • <*>类似java 的<?>
  • setValue的三个参数解释
    • 前两个和getValue函数的相似
    • 第三个参数表示具体要赋值给委托属性的值——————该参数类型要和getValue()方法中返回值类型相同

参考《第一行代码》

郭霖老师

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:30:10  更:2021-09-02 11:31:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 5:52:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码