Junior — Middle
Milyen bytecode generálódik a Kotlinban a companion object bejelentéséhez Java-projektben fordítva?
sobes.tech MI
Válasz az MI-től
Kotlinban a JVM bytecode-ba fordítva a companion object deklaráció egy statikus beágyazott osztállyá alakul, melynek neve Companion. Ez az osztály tartalmazza a companion object összes tagját, mint normál metódusokat és mezőket.
Java kódban a companion object tagjaihoz való hozzáférés a külső osztály statikus Companion mezőjére mutató hivatkozással történik.
Kotlin példa:
class MyClass {
companion object {
fun foo() = "Hello"
}
}
A fordított bytecode tartalmazni fogja a MyClass$Companion osztályt a foo() metódussal, és a MyClass-ban lesz egy statikus Companion mező, ami a MyClass$Companion típusú.
Java-ban ez így néz ki:
MyClass.Companion.foo();
Így a companion object singletonként valósul meg, egy beágyazott osztályként, amelyhez statikus mezőn keresztül lehet hozzáférni.