为Collection <t>指定类型有什么好处?

时间:2019-02-23 03:17:22

标签: java kotlin collections

Collection界面需要输入类型...

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

1 个答案:

答案 0 :(得分:2)

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

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

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

这避免了在运行时使用ClassCastException,因为在编译时会出现错误(“类型不匹配” )。同样,泛型可以使代码整洁,因为我们不需要在Java中使用强制转换和instanceof运算符,或者在Kotlin中使用as运算符。这意味着,如果我们指定显式类型,例如MutableCollection<String>,则当我们从集合中获取它时就无需对其进行强制转换:

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

由于不生成用于类型检查的字节码指令,因此它还可以增加运行时的收益。