Sobes.tech
Junior — Middle

Lehetőség van tulajdonságok deklarálására osztálydefiníción kívül a Kotlin nyelvben?

sobes.tech MI

Válasz az MI-től

Kotlinban általában a tulajdonságokat a osztálydefinícióban deklarálják. Azonban, ha a osztályon kívül szeretnél tulajdonságot hozzáadni, akkor használhatod a kiterjesztéseket (extension properties).

A kiterjesztések lehetővé teszik, hogy új tulajdonságokat vagy függvényeket adjunk meglévő osztályokhoz anélkül, hogy módosítanánk a forráskódjukat.

Példa egy osztályon kívüli kiterjesztett tulajdonságra:

class User(val name: String)

// Kiterjesztett tulajdonság az osztályon kívül
val User.firstChar: Char
    get() = this.name.first()

fun main() {
    val user = User("Anna")
    println(user.firstChar) // 'A' kiírása
}

Fontos: a kiterjesztett tulajdonságok nem tartalmazhatnak állapotot (backing field), ezért csak számítottak lehetnek (csak getterrel vagy getterrel és setterrel, de mező nélkül).

Így a tulajdonságokat az osztálydefiníción kívül kiterjesztéseken keresztül lehet deklarálni, de korlátozásokkal.