接口的静态实例作为接口的一部分

时间:2018-03-01 19:49:03

标签: kotlin

想象一下,我有一个像:

这样的界面
interface MyInterface {
    fun doSomething()
}

我在Kotlin和Java之间进行交互。我现在想要一个这个接口的常量静态实例,但我希望它成为接口的一部分。我能做到这一点:

interface MyInterface {
    fun doSomething()
    companion object {
        val CONSTANT = object: MyInterface {
            override fun doSomething() { ... }
        }
    }
}

但这意味着我需要写MyInterface.Companion.getCONSTANT()@JvmField在这里无法工作。

我也尝试过:

interface MyInterface {
    fun doSomething()
    object CONSTANT: MyInterface {
            override fun doSomething() { ... }
        }
    }
}

哪个适用于其他Kotlin文件(我可以写MyInterface.CONSTANT),但我必须在Java中编写MyInterface.CONSTANT.INSTANCE。这个解决方案似乎与我想要的最接近。

任何解决方案?我希望能够在Kotlin和Java中编写MyInterface.CONSTANT并让它们引用实现该接口的单个​​static final对象。

我相信我也可以将我的界面转换为抽象类,但这是最后的选择。

1 个答案:

答案 0 :(得分:1)

此故障单中跟踪了无法在接口中使用@JvmStatic的问题:https://youtrack.jetbrains.com/oauth?state=%2Fissue%2FKT-6301

现在已修复,comment表示

  

修复可以在1.2.30下的语言版本1.3'选项