首页 > 解决方案 > 如何防止在我的对象上使用 kotlin 扩展?

问题描述

对于我的应用程序中的特殊线程问题,我使用runOrQueue()接受块的方法创建了一个对象。以下是用于说明目的的简化版本:

class SpecialThread {
    fun runOrQueue() {}
}

问题是,当我尝试使用此方法编写代码时,IDE 会首先自动完成一个名为 的 Kotlin 扩展方法run(),该方法在标准库中定义:

@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R {…}

这是 IDE 自动完成的屏幕截图:

在此处输入图像描述

这在我的应用程序的上下文中尤其危险,因为两者run都会runOrQueue产生相似的结果(都运行代码块),但标准库版本会在某些情况下崩溃,并正确包装在runOrQueue方法中。

有什么方法可以明确禁用run在我创建的这个特定对象上使用扩展的可能性?事实上,回顾我自己编写的代码,我已经错误地使用run了两次而不是较长的方法名,这样不好。

标签: android-studiokotlin

解决方案


如果你真的不想重命名你的方法,并且你绝对确定你永远不会使用这个run函数......

您实际上可以通过单击建议旁边的意图操作图标从自动完成中排除任何方法:

从完成中排除

Settings,你可以在下面找到这个Editor -> General -> Auto Import,然后Exclude from import and completion。例如,要排除内置run函数,您可以通过上述意图或手动添加此条目:

排除清单

如果您将此项目设置为范围,则排除项也可以签入 VCS,您会在 下找到它.idea/codeInsightSettings.xml,其中将有这些相应的内容要排除run,非常不言自明:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="JavaProjectCodeInsightSettings">
    <excluded-names>
      <name>kotlin.run</name>
    </excluded-names>
  </component>
</project>

推荐阅读