Sobes.tech
Junior — Middle

Ποιο bytecode παράγεται για την δήλωση ενός αντικειμένου companion σε Kotlin κατά τη μεταγλώττιση σε ένα έργο Java;

sobes.tech AI

Απάντηση από AI

Στην Kotlin, κατά τη μεταγλώττιση σε bytecode JVM, η δήλωση companion object μετατρέπεται σε μια στατική εσωτερική κλάση με το όνομα Companion. Αυτή η κλάση περιέχει όλα τα μέλη του companion object ως συνηθισμένες μεθόδους και πεδία.

Στον κώδικα Java, για πρόσβαση στα μέλη του companion object, χρησιμοποιείται μια αναφορά στο στατικό πεδίο Companion της εξωτερικής κλάσης.

Παράδειγμα σε Kotlin:

class MyClass {
    companion object {
        fun foo() = "Hello"
    }
}

Ο μεταγλωττισμένος bytecode θα περιέχει την κλάση MyClass$Companion με τη μέθοδο foo(), και στην MyClass θα υπάρχει ένα στατικό πεδίο Companion τύπου MyClass$Companion.

Στον Java, αυτό φαίνεται περίπου έτσι:

MyClass.Companion.foo();

Έτσι, το companion object υλοποιείται ως ένα singleton εσωτερικής κλάσης προσβάσιμο μέσω στατικού πεδίου.