在Kotlin中声明一个静态接口字段

时间:2017-11-21 08:34:47

标签: interface kotlin

是否可以编写等效的Java

interface Foo {
    public static final INSTANCE = new Foo {};
}

在Kotlin?

如果Foo是一个班级,我可以使用:

class Foo {
    companion object {
        @JvmField
        val INSTANCE = object : Foo() {}
    }
}

但是使用界面会出错:

  

JvmField不能应用于接口

的伴随对象中定义的属性

@JvmStatic也不起作用。

2 个答案:

答案 0 :(得分:1)

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

interface Foo {
    companion object {
        @JvmField val INSTANCE = object : Foo {}
    }
}

然后从Java中以Foo.INSTANCE进行调用。

答案 1 :(得分:0)

以下适用于我。

interface Foo {

    fun bar()

    companion object {
        val INSTANCE = object : Foo { // There are no () An interface cannot be instantiated.
            override fun bar() {
                //Do something
                ...
            }
        }
    }
}

然后在您的活动中,只需调用Foo.INSTANCE即可将实例返回到Foo