繁体   English   中英

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

[英]What benefit does specifying a type for Collection<T> have?

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

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

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

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

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

这样可以避免在运行时发生ClassCastException ,因为您将在编译时收到错误( “类型不匹配” )。 此外泛型使代码更干净因为我们并不需要使用铸造instanceof运算符在Java或as在科特林运营商 这意味着,如果我们指定显式类型,例如MutableCollection<String> ,则当从Collection中获取它时,无需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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM