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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android-Kotlin-泛型学习 -> 正文阅读

[移动开发]Android-Kotlin-泛型学习

一、为什么用到泛型

? ? ? ? 个人理解为增加代码复用性又解耦代码。

? ? ? ? 在Java中,我们常见的泛型有:泛型类、泛型接口、泛型方法和泛型属性,Kotlin泛型系统继承了Java泛型系统,同时添加了一些强化的地方(摘自Imooc的视频:https://www.imooc.com/video/23361)。

? ? ? ? 1、泛型接口/类(泛型类型)

? ? ? ? 定义泛型类型,实在类型名之后、主构造函数之前用尖括号括起来的大写字母类型参数指定:

/**
 * 备注:kotlin泛型
 */
fun main() {
    //泛型接口
    val drinkApple = DrinkApple()
    drinkApple.drink("drink")

    //2、泛型类
    val blueColor1 = BlueColor1("#0000ff")
    blueColor1.printColor()

    val blueColor2 = BlueColor2()
    blueColor2.printColor("#0000ff")

    //3、泛型方法
    fromJson1<String>("",String::class.java)
    fromJson1<DrinkApple>("",DrinkApple::class.java)

    //4、泛型约束,也可以是View的子类
    fromJson2<View>("",View::class.java)
    fromJson2<TextView>("",TextView::class.java)

    //5、泛型约束2
    fromJson3<ViewTest>("",ViewTest::class.java)
}

interface Drink<T>{
    fun drink(t:T/*泛型字段*/)
}

class DrinkApple:Drink<String>{
    override fun drink(t: String) {
        println("drink:${t}")
    }
}

abstract class Color1<T>(val t:T/*泛型字段*/){
    abstract fun printColor()
}

class BlueColor1(val color:String):Color1<String>(color){
    override fun printColor() {
        println("printColor1:${color}")
    }
}

abstract class Color2<T>{
    abstract fun printColor(t:T/*泛型字段*/)
}

class BlueColor2: Color2<String>() {
    override fun printColor(color:String) {
        println("printColor2:${color}")
    }
}
//泛型方法
fun<T> fromJson1(json:String,tClass:Class<T>):T?{
    val instance:T? = tClass.newInstance()
    return instance
}

//泛型约束1
//泛型T只能是AD_data或AD_data的子类
fun<T:View> fromJson2(json:String,tClass:Class<T>):T?{
    val instance:T? = tClass.newInstance()
    return instance
}

//泛型约束2
fun <T> fromJson3(json:String,tClass:Class<T>):T? where T:Comparable<T> {
    val instance:T? = tClass.newInstance()
    return instance
}
class ViewTest:JSONObject(),Comparable<ViewTest>{
    override fun compareTo(other: ViewTest): Int {
        return 0
    }

}

//out约束泛型参数的类型上限
open class Animal

class DogAnimal:Animal()

class CatAnimal:Animal()

class WhiteDogAnimal:Animal()

fun animalFuns(){
    //传入的泛型参数可以是Animal及Animal的子类
    val animalList:ArrayList<out Animal> = ArrayList<DogAnimal>()

    //使用处使用in关键字声明,约定泛型的下限,允许传入的泛型类型是DogAnimal及父类Animal
    val animalList2:ArrayList<in DogAnimal> = ArrayList<Animal>()

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-08-04 11:19:40  更:2021-08-04 11:22:35 
 
开发: 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年5日历 -2024/5/17 12:33:13-

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