Kotlin 泛型2024 年 8 月 29 日 | 阅读 3 分钟 泛型 是强大的特性,允许定义可以使用不同类型的类、方法和属性等。 类、方法的类型差异会在编译时进行检查。 泛型类型类或方法被声明为参数化类型。 参数化类型是具有实际类型参数的泛型类型的实例。 参数化类型使用尖括号 <> 声明。泛型主要用于集合。 泛型的优势以下是使用泛型的关键优势
让我们看看不使用泛型的问题。 在本例中,我们创建了一个具有带单个参数的主构造函数的 Person 类。现在,我们想在 Person 类的对象中传递不同类型的数据(比如 Int 类型 Person(30) 和 String 类型 Person("40"))。 Person 类的主构造函数接受 Int 类型 Person(30) 并拒绝 String 类型 Person("40")。 它会生成类型不匹配的编译时错误。 为了解决上述问题,我们使用泛型类型类,它是一个用户定义的类,接受单个类中不同类型的参数。 让我们使用泛型类型重写上面的代码。 类型为 <T> 的 Person 类是一个通用类型类,它接受 Int 和 String 类型的参数。 换句话说,类型参数 <T> 是一个占位符,将被类型参数替换。 当泛型类型被实例化时,它将被替换。 输出 30 40 在上面的例子中,当使用 Int 类型 Person<Int>(30) 和 Person<String>("40") 创建 Person 类的对象时,它分别用 Int 和 String 替换类型为 T 的 Person 类。 泛型类的语法 泛型方法的语法 Kotlin 泛型示例让我们看一个泛型方法的例子。 在这个例子中,我们访问集合类型 (ArrayList) 的泛型方法。 为此,我们创建了两个不同的 ArrayList 类的对象:arrayListOf<String>("Ashu","Ajay") 和 arrayListOf<Float>(10.5f,5.0f,25.5f) ,分别对应 String 和 Float 类型。 当我们使用 printValue(stringList) 调用泛型方法 <T>printValue(list: ArrayList<T>) 时,方法 <T>printValue(list: ArrayList<T>) 的类型 T 将被 String 类型替换。 类似地,当我们使用 printValue(floatList) 调用泛型方法时,方法 <T>printValue(list: ArrayList<T>) 的类型 T 将被 Float 类型替换。 输出 printing the string value of stringList: Ashu Ashu Ajay 10.5 5.0 25.5 Kotlin 泛型扩展函数示例由于扩展函数允许向类添加方法,而无需继承类或任何设计模式。 在本例中,我们将一个 printValue() 方法添加到泛型类型的 ArrayList 类中。 此方法分别从 String 和 Float 类型的 stringList.printValue() 和 floatList.printValue() 中调用。 由于扩展函数中的 "this" 关键字代表当前调用实例。 当我们使用 stringList.printValue() 调用扩展函数时,this 代表包含 String 类型值的 stringList 实例。 类似地,使用 floatList.printValue() 调用扩展函数时,this 代表包含 Float 类型值的 floatList 实例。 输出 Ashu Ajay 10.5 5.0 25.5 下一个主题Kotlin Integer 类型范围 |
我们请求您订阅我们的新闻通讯以获取最新更新。