java - 为 Collection 指定类型有什么好处有?
解决方案
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
它还增加了运行时的好处,因为不会生成进行类型检查的字节码指令。
推荐阅读
- filesystems - 添加文件系统 ISE 逻辑应用连接器时出错
- spring-boot - spring cloud streamrabbitmq消费者动态伸缩
- java - 60000 毫秒后元数据中不存在主题
- bluetooth - Amazon Echo 之类的设备如何连接到网络
- matomo - 在 Matomo 中查询所有网站时出错 [fechada]
- javascript - python stomp 客户端 - 连接到端点
- kubernetes - 具有 TB 数据的 kubernetes 上的 ReadWriteMany 卷
- typescript - 命名空间“google.maps.places”没有导出成员“AutocompleteService”
- react-native - 是否可以使用 styled-theming 自定义样式相关的道具?
- swiftui - 将observedObject放入List