深入理解kotlin泛型

kotlin的泛型与java 一样,都是一种语法糖。泛型(Generics) 其实就是把类型参数化,它的引入给强类型编程语言加入了更强的灵活性。

泛型接口/类(泛型类型)

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

泛型字段

定义泛型字段,可以完整的写明类型参数,如果编译器可以自行推定类型参数,也可以省略类型参数

泛型方法

类型参数要放在方法名的前面

//这段 Kotlin 代码定义了一个泛型接口 Drink<T>,其中 T 表示类型参数,
// 表示这个接口可以接受任意类型的参数。这个接口中只有一个抽象方法 drink(t: T),
// 表示喝一种东西,参数 t 表示要喝的东西的类型。
//接下来,这段代码定义了一个类 DrinkApple,它实现了泛型接口 Drink<String>,
// 表示这个类只能喝字符串类型的东西。在 DrinkApple 类中,重写了 drink(t: String)
// 方法,实现了具体的喝苹果的操作,当 drink() 方法被调用时,会输出字符串 "drink:xxx",
// 其中 xxx 是调用时传入的字符串参数。
//最后,在 main() 函数中,创建了一个 DrinkApple 的实例 drinkApple,
// 并调用了它的 drink("drink") 方法,输出了字符串 "drink:drink"。
interface  Drink<T> {
    fun drink(t: T/*范型字段*/)
}

//继承
class DrinkApple :Drink<String> {
    override fun drink(t: String) {
        print("drink:${t}")
    }

}

//这段 Kotlin 代码定义了一个抽象类 Color<T>,其中 T 表示类型参数,
// 表示这个抽象类可以接受任意类型的参数。在 Color<T> 类中,有一个属性 t,
// 表示这个类的类型参数。
//Color<T> 类中还定义了一个抽象方法 printColor(),表示打印颜色的操作。
// 因为这个方法是抽象的,所以子类必须实现它。
//接下来,这段代码定义了一个子类 BlueColor,它继承自 Color<String>,
// 表示这个类只能操作字符串类型的颜色。在 BlueColor 类中,有一个构造函数,
// 它接受一个字符串类型的参数 color,并将它传递给父类的构造函数。
//在 BlueColor 类中,重写了父类的 printColor() 方法,实现了打印颜色的具体操作,
// 当 printColor() 方法被调用时,会输出字符串 "printColor:xxx",
// 其中 xxx 是调用时传入的字符串参数 color。
abstract class Color<T>(val t: T/*范型字段*/) {
    abstract fun printColor()
}

class  BlueColor(val color: String): Color<String>(color) {
    override fun printColor() {
        println("printColor:${color}")
    }

}
//kotlin泛型
fun main() {
    //1.泛型接口
    val drinkApple = DrinkApple()
    drinkApple.drink("drink")
    println("")
    //2.泛型类
    //这段 Kotlin 代码定义了一个 main() 函数,其中创建了一个 BlueColor 类
    // 的实例 blueColor,并传入字符串 "blue" 作为构造函数的参数。
    // 然后,调用了 blueColor 对象的 printColor() 方法,
    // 输出了字符串 "printColor:blue"。
    val blueColor = BlueColor("blue")
    blueColor.printColor()

    //3.泛型方法
    fromJson<String>("{}",String::class.java)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值