问题
Given the following code:
open class Foo {
companion object {
fun fez() {}
}
}
class Bar : Foo() {
companion object {
fun baz() { fez() }
}
}
baz()
can callfez()
- I can call
Foo.fez()
- I can call
Bar.baz()
- But, I cannot call
Bar.fez()
How do I achieve the final behaviour?
回答1:
A companion object is a static member of its surrounding class:
public class Foo {
public static final Foo.Companion Companion;
public static final class Companion {
public final void fez() {
}
//constructors
}
}
The call to fez()
is compiled to :
Foo.Companion.fez();
FYI: The shown Java code shows a representation of the bytecode generated by Kotlin.
As a result, you cannot call Bar.fez()
because the Companion object in Bar
does not have that method.
来源:https://stackoverflow.com/questions/47296133/kotlin-accessing-companion-object-members-in-derived-types