Kotlin访问派生types中的伴随对象成员
给出以下代码:
open class Foo { companion object { fun fez() {} } } class Bar : Foo() { companion object { fun baz() { fez() } } }
-
baz()
可以调用fez()
- 我可以打电话给
Foo.fez()
- 我可以打电话给
Bar.baz()
- 但是,我不能打电话给
Bar.fez()
我如何实现最终的行为?
随播对象是其周围类的静态成员:
public class Foo { public static final Foo.Companion Companion; public static final class Companion { public final void fez() { } //constructors } }
对fez()
的调用被编译为:
Foo.Companion.fez();
所示的Java代码显示了由Kotlin生成的字节码的表示forms。
因此,不能调用Bar.fez()
因为Bar
中的Companion对象没有该方法。