为什么拥有@JvmStatic但从Java调用仍然需要“同伴”

时间:2018-07-25 20:15:40

标签: android kotlin

doc中,可以用Java调用kotlin静态函数:

class C {
    companion object {
        @JvmStatic fun foo() {}
        fun bar() {}
    }
}

C.foo(); // works fine
C.bar(); // error
C.INSTANCE.bar(); // works, a call through the singleton instance
C.INSTANCE.foo(); // works too

但是对我来说,如果没有'companion',它将无法正常工作

kotlin代码

class MyClass {

    companion object {
        @JvmStatic fun test(category: String, otherType: OtherType) {
        ... ...
        }
    }
}
在Java代码中

调用静态test()函数,

MyClass.Companion.test("", OtherType())  //<== works
MyClass.test("", OtherType())  //<== error, "Cannot resolve method 'test(String, ..."

我可能还会错过什么?

2 个答案:

答案 0 :(得分:0)

注释@JvmStatic告诉Kotlin编译器为类MyClass生成一个静态方法,因此MyClass.Companion.test(...)MyClass.test("", OtherType())都可以工作。

没有@JvmStatic的情况下,只有MyClass.Companion.test(...)起作用,因为编译器不会生成MyClass.test(...)

答案 1 :(得分:0)

在其他项目中遇到类似问题,但是在删除该项目并重新克隆之后,同步后问题就消失了。