首页 > 解决方案 > 为 Collection 指定类型有什么好处有?

问题描述

Collection接口需要一个类型...

Collection<Int>有什么好处Collection<Any>(这是相同的,但允许所有类型)?

标签: javakotlincollections

解决方案


Collection<T>- 是一个通用接口。泛型类使程序员能够使用单个类或接口声明来指定一组相关类型。Java 1.5 和 Kotlin 带有泛型,所有集合接口和实现都大量使用它。

泛型允许我们提供Object集合可以包含的类型,因此如果您尝试添加其他类型的任何元素,则会引发compile time error。泛型提供编译时类型安全,允许程序员在编译时捕获无效类型。这意味着如果你这样写,编译器会报错:

val collection: MutableCollection<Int> = mutableListOf()
collection.add("some string") // compile time error saying "Type mismatch"

这避免了ClassCastException在运行时,因为您将在编译时收到错误(“类型不匹配”)。由于我们不需要instanceof在 Java 中使用强制转换和运算符或as在 Kotlin中使用运算符,因此泛型也使代码变得干净。这意味着如果我们指定显式类型,例如 MutableCollection<String>,当我们从 Collection 中获取它时,我们不需要强制转换它:

val collection: MutableCollection<String> = mutableListOf()
collection.add("Some string")

val data: String = collection.elementAt(0) // don't need to cast to String

如果我们使用MutableCollection<Any>,我们需要显式转换数据:

val collection: MutableCollection<Any> = mutableListOf()
collection.add("Some string")

val data: String? = collection.elementAt(0) as? String // explicitly casting using `as` operator

它还增加了运行时的好处,因为不会生成进行类型检查的字节码指令。


推荐阅读