如何解决我的代码,以消除铸造警告?

我有一些类似这样的代码:

private val elements: ArrayList = ArrayList() 

 override fun curElements(): Collection { ... return elements as Collection // squigly underline here, unchecked cast warning } 

元素中的所有ISomeElement对象都是实现ISomeElement GenericElement对象

我怎样才能解决我的代码,以消除这个警告? 代码工作正常,这只是我问的警告

我无法改变乐趣的返回types

  1. 如果ISomeElement扩展了GenericElement那么你将不会得到这样的警告; 你甚至不需要用显式函数返回types存在的显式转换。
  2. 如果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 } 

    您还可以将elementstypes更改为ArrayList ,然后在将每个ISomeElement实例添加到集合时将其转换为GenericElement

     elements.add(iSomeElement as GenericElement)