如何解决我的代码,以消除铸造警告?
我有一些类似这样的代码:
private val elements: ArrayList = ArrayList()
…
override fun curElements(): Collection { ... return elements as Collection // squigly underline here, unchecked cast warning }
元素中的所有ISomeElement
对象都是实现ISomeElement
GenericElement
对象
我怎样才能解决我的代码,以消除这个警告? 代码工作正常,这只是我问的警告
我无法改变乐趣的返回types
- 如果
ISomeElement
扩展了GenericElement
那么你将不会得到这样的警告; 你甚至不需要用显式函数返回types存在的显式转换。 -
如果
ISomeElement
不扩展GenericElement
那么没有安全的方法将Collection
“投射”到Collection
。您可以将元素
map
到所需types的新集合:fun curElements(): Collection
{ return elements.map { it as GenericElement } } 如果您知道集合中可能存在一些不实现
GenericElement
元素,并且想默默忽略它们,则还可以过滤集合:fun curElements(): Collection
{ return elements.filterIsInstance () } 如果您确定所有
elements
实现了GenericElement
那么您可以取消警告:fun curElements(): Collection
{ @Suppress("UNCHECKED_CAST") return elements as Collection } 您还可以将
elements
types更改为ArrayList
,然后在将每个ISomeElement
实例添加到集合时将其转换为GenericElement
:elements.add(iSomeElement as GenericElement)