我有一些类似的代码:
private val elements: ArrayList<ISomeElement> = ArrayList()
...
override fun curElements(): Collection<GenericElement> {
...
return elements as Collection<GenericElement> // squigly underline here, unchecked cast warning
}
元素中的所有ISomeElement
个对象都是实现GenericElement
的{{1}}个对象
如何修复我的代码以删除此警告?代码工作正常,这只是我要问的警告
我无法更改乐趣的返回类型
答案 0 :(得分:3)
ISomeElement
延长GenericElement
,那么您将不会收到此类警告;你甚至不需要使用显式函数返回类型进行显式转换。如果ISomeElement
没有延伸GenericElement
那么就没有安全的方式去&#34;施放&#34; 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)