![](/img/trans.png)
[英]What is the benefit of extending a generic by specifying the new type as actual type of generic
[英]What benefit does specifying a type for Collection<T> have?
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.