Tárgyak Kotlinban

1. Bemutatkozás

Kotlin sok ötletet kölcsönvett más nyelvektől; az egyik ilyen konstrukció a tárgy.

Ebben a rövid cikkben megnézzük, hogy melyek az objektumok és hogyan használhatók.

2. Tárgyak Kotlinban

Kotlinban, mint szinte az összes JVM nyelven, ott van az a fogalma osztály mint az objektumorientált programozási modell magja. Kotlin bevezeti az an fogalmát tárgy az egésznek a tetejébe.

Mivel a osztály olyan struktúrákat ír le, amelyek tetszés szerint és bármikor példányosíthatók, és annyi példányt tesz lehetővé, amennyire szükséges an tárgy ehelyett egyetlen statikus példányt képvisel, és soha nem lehet több vagy kevesebb, mint ez az egyetlen példány.

Ez különféle technikáknál hasznos, ideértve az egyes objektumokat és a kapszulázás funkcióinak egyszerű csomagolását:

objektum SimpleSingleton {val answer = 42; szórakoztató üdvözlet (név: String) = "Helló, $ name!" } assertEquals (42, SimpleSingleton.answer) assertEquals ("Hello, világ!", SimpleSingleton.greet ("világ"))

Az objektumok teljes körű támogatást nyújtanak a láthatóság módosítóihoz is, amely lehetővé teszi az adatok elrejtését és beágyazását, mint bármely más osztályban:

objektum számláló {private var count: Int = 0 fun currentCount () = count fun increment () {++ count}} Counter.increment () println (Counter.currentCount ()) println (Counter.count) // ez nem fog sikerülni összeállít

Továbbá, az objektumok kiterjeszthetik az osztályokat és megvalósíthatnak interfészeket. Ezzel gyakorlatilag a szülők osztályainak egyedülálló példányai, pontosan az elvárásoknak megfelelően.

Ez nagyon hasznos lehet olyan esetekben, amikor hontalan megvalósítással rendelkezünk, és nincs szükség minden alkalommal új példány létrehozására - pl. Összehasonlító:

object ReverseStringComparator: Comparator {felülírja a szórakoztató összehasonlítást (o1: karakterlánc, o2: karakterlánc) = o1.reversed (). CompareTo (o2.reversed ())} val stringek = listOf ("Hello", "World") val sortedStrings = karakterláncok .sortedWith (ReverseStringComparator)

3. Mi az a társobjektum?

A társobjektumok lényegében megegyeznek a standardokkal tárgy definícióval, csak néhány további funkcióval a fejlesztés megkönnyítése érdekében.

A társobjektumot mindig egy másik osztályon belül deklarálják. Bár lehet neve, nem kell, ebben az esetben automatikusan megvan a neve Társ:

class OuterClass {kísérőobjektum {// egyenértékű a "kísérőobjektum társával"}}

A kísérőobjektumok lehetővé teszik a tagok számára a kísérőosztály belsejéből való hozzáférést a név megadása nélkül.

Ugyanakkor a látható tagok az osztályon kívülről is elérhetők, ha az osztály neve előtagként szerepel:

class OuterClass {társobjektum {private val secret = "Nem láthatsz engem" val public = "You can see me"} fun getSecretValue () = secret} assertEquals ("Láthatsz engem, OuterClass.public) assertEquals ( "Nem láthat", OuterClass.secret) // Nem lehet hozzáférni a "titkos"

4. Statikus mezők

A társobjektumok fő célja a Java-ból ismert statikus mezők / módszerek cseréje. Ezeket a mezőket azonban nem automatikusan hozza létre a kapott osztályfájl.

Ha szükségünk van ezek előállítására, akkor a @JvmStatic helyette a mezőn található feljegyzés, amely ezután a várt módon létrehozza a bytecodet:

class StaticClass {társobjektum {@JvmStatic val staticField = 42}}

Ennek nélkül a statikus mező staticField Java-kódból nem könnyen elérhető.

Ennek a kommentárnak a hozzáadásával pontosan azt a mezőt állítja elő, amire szükség van egy szabványos statikus mezőhöz, lehetővé téve a teljes átjárhatóságot a Java-tól, ha szükséges.

Ez azt jelenti, hogy a fentiek generálják a statikus módszer getStaticField () a StaticClass osztály.

5. Következtetés

A kotlini objektumok egy egész extra réteget adnak hozzá, amelyet felhasználhatunk, tovább egyszerűsítve a kódunkat és megkönnyítve a fejlesztését.

A társobjektumok ezt még tovább viszik, lehetővé téve a tisztább kódot, amelyet könnyebb karbantartani és kezelni.

Mint mindig, a kódrészletek is megtalálhatók a GitHubon.