Sobes.tech
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.