kotlin - 如何修复我的代码以删除强制转换警告?

标签 kotlin

我有一些类似的代码:

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/

    相关文章:

    kotlin - 从 lambdas 或 Kotlin : 'return' is not allowed here 返回

    Android Studio - Kotlin 自动完成功能不起作用

    Kotlin 唯一的 getter 公有、私有(private) setter

    kotlin - 无法使用 kotlin 和 dagger 注入(inject)多重绑定(bind)

    java - Kotlin 与 Java : Calling function with lambda parameter

    android - Kotlin和Unity开发错误

    file - 日志文件不会生成完整的日志,尽管执行已完成

    kotlin,如何将扩展功能添加到已定义的类伴随对象

    android - 在设备上安装应用程序时出错

    intellij-idea - 使用 kotlin-stdlib 1.1.51 但加载了 kotlin-runtime 1.3