【问题标题】:Kotlin - possibly incorrectly reporting an unused codeKotlin - 可能错误地报告未使用的代码
【发布时间】:2016-12-20 14:11:36
【问题描述】:

我的应用程序中的所有活动都有一个基类。我希望变量activityClass 的类型为<? extends BaseActivity>。这就是我在 Kotlin 中声明变量的方式:

 var activityClass = MainActivity::class.java as Class<out BaseActivity>

问题在于,在 Android Studio 中,“as Class&lt;out BaseActivity&gt;”部分变灰,弹出消息显示:“无需演员表”

如果我遵循 AS 建议并删除了转换,当我尝试使用派生自 BaseActivity 的其他活动分配变量时会出现编译器错误。以下代码:

activityClass = SpecificActivity::class.java

给我一​​个错误“类型推断失败。预期类型不匹配:需要Class&lt;MainActivity&gt;,找到Class&lt;SpecificActivity&gt;”。

这主要是在我提交代码更改时导致问题,因为检查了 AS 提交向导中的选项“清理”和“优化导入”,这会删除“未使用”代码(“as Class”部分),这实际上是实际使用。 解决方案不是关闭这些选项,因为我实际上希望将它们设置为 true。

如果我提交更改,请转到使用强制转换的类并撤消更改,它会询问我“在提交之前撤消优化导入吗?”。如果我确认,我会恢复演员表,所以我知道这是导致问题的原因。

PS:我使用 Kotlin 1.0.5-3

【问题讨论】:

    标签: android android-studio intellij-idea kotlin


    【解决方案1】:

    解决这个问题的正确方法是指定变量类型:

    var activityClass: Class&lt;out BaseActivity&gt; = MainActivity::class.java

    【讨论】:

    • 好的,解决了我的问题!你也知道为什么 lint 会在我的代码被实际使用时尝试删除它吗?
    • 这样的演员表未使用;它影响推断变量类型的事实是副作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    相关资源
    最近更新 更多