| |
|
开发:
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语法总结(三)-泛型的使用 |
怎样声明一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数声明如下:
这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等。如果想比较两个Double类型是否相等,可以修改上面声明的函数如下:
这个函数参数列表是两个Double类型,它只能比较两个Double类型参数是否相等。如果想比较两个String类型是否相等,可以修改上面声明的函数如下:
以上分别对3种类型的两个参数进行了比较,声明了类似的3个函数。 那么是否可以声明一个函数使之能够比较3种类型呢? 合并代码:?
在函数名isEquals前面添加<T>这就是泛型函数了,<T>是声明类型参数,T是类型参数,函数中参数类型也被声明为T,在调用函数时T会用实际的类型替代。 泛型中类型参数,可以是任何大写或小写的英文字母,一般情况下人们习惯于使用字母T、E、K和U等大写英文字母。
多类型参数
上面泛型函数示例中只是使用了一种类型参数,事实上可以同时声明使用多个类型参数,它们之间用逗号“,”
分隔,示例如下:
类型参数不仅可以声明函数参数类型,还可以声明函数的返回类型,示例代码如下:
泛型约束
在
声明
fun <T> isEquals(a: T, b: T): Boolean
函数时,事实上还有一点问题,这是因为并不是所有的类型参数T
都具有
“
可比性
”
,必须限定
T
的类型,如果只是数字类型比较可以限定为Number
,因为
Int
和
Double
等数字类型都继承
Number
,是Number的子类型。
规则:
声明类型参数时在
T
后面添加冒号(
:
)和限定类型,这种表示方式称为“
泛型约束
”
,泛型约束主要应用于泛型函数和泛型类的声明。
上述代码是声明泛型函数,其中<T : Number>是带有约束的类型参数。 如果函数泛型限定声明为?<T : Number>,则函数只能比较Number类型的参数,不能比较String等其他数据类型,为此也可以将类型参数限定为Comparable<T>接口类型,所有可比较的对象都实现Comparable<T>接口,Comparable<T>本身也是泛型类型。
可空类型参数和非空类型参数
在泛型函数声明中,类型参数没有泛型约束,函数可以接收任何类型的参数,包括可空和非空数据。例如fun <T> isEquals(a: T, b: T): Boolean
函数调用时可以传递可空或非空数据,代码如下:
所有没有泛型约束的类型参数,事实上也是有限定类型的,只不过是Any?,Any?可以任何可空类型的根类,也兼容非空类型。
如果不想接收任何可空类型数据,可以采用
Any
作为约束类型,
Any
是任何非空类型的父类,代码如下:
泛型属性
在
Kotlin
中还可以声明泛型属性,但是这种属性一定是扩展属性,不是能是普通属性。普通属性不能声明泛型,只有扩展属性才能声明泛型。
示例代码如下:
上述代码第①行和第②行是声明ArrayList集合的扩展属性first和second,其中使用了泛型。集合中的元素类型采用类型参数T表示,返回类型是T?表示可能有返回空值的情况。 代码第③行是实例化,Int类型的ArrayList集合,使用ArrayList构造函数创建一个空元素的集合对象。也可以使用arrayListOf<Int>()函数创建集合对象。代码是④行是创建String类型ArrayList集合对象,这里使用arrayListOf<String>("A", "B", "C", "D")函数创建并初始化该集合。 泛型类
在声明泛型类时也可以有多个类型参数,类似于泛型函数可以使用多个不同的字母声明不
同的类型参数。另外,在泛型类中也可以使用泛型约束,如下代码所示:
class Queue<T : Number> {...}
泛型接口:
?
实现接口IQueue<T>具体方式有很多,可以是List(列表结构)、Set(集结构)或Hash(散列结构)等多种不同方式,下面是一个基于List实现方式,代码如下:
|
|
移动开发 最新文章 |
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/23 10:00:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |