我有一些类似的代码:
private val elements: ArrayList<ISomeElement> = ArrayList()
...
override fun curElements(): Collection<GenericElement> {
...
return elements as Collection<GenericElement> // squigly underline here, unchecked cast warning
}
全部
ISomeElement
元素中的对象是 GenericElement
实现 ISomeElement
的对象如何修复我的代码以删除此警告?代码工作正常,这只是我要问的警告
我无法更改乐趣的返回类型
最佳答案
ISomeElement
扩展 GenericElement
那么您将不会收到这样的警告;您甚至不需要具有显式函数返回类型的显式强制转换。 ISomeElement
不延长 GenericElement
那么就没有安全的方法来“转换”一个 Collection<ISomeElement>
到 Collection<GenericElement>
.您可以
map
将元素添加到所需类型的新集合中:fun curElements(): Collection<GenericElement> {
return elements.map { it as GenericElement }
}
如果您知道集合中可能有一些元素未实现
GenericElement
,您也可以过滤集合并且您想默默地忽略它们:fun curElements(): Collection<GenericElement> {
return elements.filterIsInstance<GenericElement>()
}
如果您确定所有
elements
实现GenericElement
那么你可以抑制警告:fun curElements(): Collection<GenericElement> {
@Suppress("UNCHECKED_CAST")
return elements as Collection<GenericElement>
}
您还可以更改
elements
的类型至ArrayList<GenericElement>
然后施放每个 ISomeElement
实例到 GenericElement
当您将它们添加到集合中时:elements.add(iSomeElement as GenericElement)
关于kotlin - 如何修复我的代码以删除强制转换警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199578/