在 Kotlin 中声明静态接口字段

Ale*_*nov 5 interface kotlin

是否可以写出相当于Java的东西

interface Foo {
    public static final INSTANCE = new Foo {};
}
Run Code Online (Sandbox Code Playgroud)

在科特林?

如果Foo是一堂课,我可以使用:

class Foo {
    companion object {
        @JvmField
        val INSTANCE = object : Foo() {}
    }
}
Run Code Online (Sandbox Code Playgroud)

但使用接口时会出现错误:

JvmField 不能应用于接口的伴生对象中定义的属性

@JvmStatic也不行。

And*_*ira 2

从 Kotlin 1.3 开始,您可以执行以下操作:

interface Foo {
    companion object {
        @JvmField val INSTANCE = object : Foo {}
    }
}
Run Code Online (Sandbox Code Playgroud)

并从 Java 中将其称为Foo.INSTANCE.