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) }