Sobes.tech
Middle

Milyen objektumok vannak Kotlinben és hogyan fordítódnak?

sobes.tech MI

Válasz az MI-től

A Kotlinban az objektumokat singletonok létrehozására használják. Azokat a object kulcsszóval lehet deklarálni.

object Singleton {
    fun doSomething() {
        println("Helló a singletonból!")
    }
}

Fordításkor a Kotlin Singleton objektumát egy Java Singleton osztállyá alakítja, amelynek privát statikus INSTANCE mezője és statikus inicializációs blokkja van.

// Generált Java kód példája
public final class Singleton {
   public static final Singleton INSTANCE; // Statikus mező az egyetlen példányhoz

   public final void doSomething() { // Objektum metódus
      System.out.println("Helló a singletonból!");
   }

   private Singleton() { // Privát konstruktor, hogy ne lehessen más példányokat létrehozni
   }

   static { // Statikus inicializációs blokk
      INSTANCE = new Singleton(); // Az egyetlen példány létrehozása
   }
}

A Kotlin Singleton.doSomething() metódus hívásakor a fordító generál egy statikus hívást Singleton.INSTANCE.doSomething() Java-ban.

A szokásos objektumokon kívül, a Kotlinban léteznek:

  • Tárgy-objektum (companion object): Statikus tagokat definiál egy osztályon belül. Azokat az osztály neve alapján lehet elérni. Minden osztálynak legfeljebb egy tárgy-objektuma lehet.

    class MyClass {
        companion object {
            const val MY_CONSTANT = "valami érték"
            fun create(): MyClass {
                return MyClass()
            }
        }
    }
    

    Java-ban statikus tagokká fordul.

  • Objektum kifejezés (object expression): Anonim objektumokat hoz létre, hasonlóan az anonim osztályokhoz Java-ban.

    val listener = object : MyInterface {
        override fun onClick() {
            println("Kattintott!")
        }
    }
    

    Java-ban anonim osztállyá fordul.