Sobes.tech
Junior

Selgitage võtmesõna 'this' kasutamist Kotlinis.

sobes.tech AI

Vastus AI-lt

Kotlinis this viitab praegusele klassi eksemplarile. Selle kasutus sõltub kontekstist:

  1. Klassi meetodi sees: this viitab eksemplarile, millelt meetod kutsuti.

    class MyClass {
        var value: Int = 0
    
        fun setValue(value: Int) {
            // Kasutame this.value, et pääseda ligi klassi omadusele
            // ja value meetodi parameetrile
            this.value = value 
        }
    }
    
  2. Laienduse funktsiooni või omaduse sees: this viitab objekti, millele laiendus rakendub.

    fun String.printLength() {
        // this siin on String eksemplar, millel laiendusfunktsioon on kutsutud
        println("Rida pikkus: ${this.length}") 
    }
    
    fun main() {
        "Tere".printLength() // Väljund: "Rida pikkus: 4"
    }
    
  3. Väärtuste (receiver) funktsioonide kirjeldustes: this viitab vastuvõtjale.

    fun buildString(builderAction: StringBuilder.() -> Unit): String {
        val sb = StringBuilder()
        // builderAction sees, this viitab sb-le (StringBuilder eksemplar)
        sb.builderAction() 
        return sb.toString()
    }
    
    val myString = buildString {
        // this siin on StringBuilder
        append("Tere, ")
        append("Maailm!")
    }
    
  4. Kvalifitseeritud this (kui on mitu vastuvõtjat): Kasutatakse ebamäärasuse kõrvaldamiseks, kui on sisemisi struktuure erinevate vastuvõtjatega (näiteks sisemised klassid, funktsiooni kirjeldused vastuvõtjaga). Süntaks %label@this, kus %label on kontekstiga seotud märge.

    class Outer {
        inner class Inner {
            fun printThis() {
                // this viitab Inner eksemplarile
                println("Inner this: ${this}") 
                // Outer@this viitab Outer eksemplarile
                println("Outer this: ${this@Outer}") 
            }
        }
    
        fun createInner() = Inner()
    }
    
    fun main() {
        Outer().createInner().printThis()
    }
    

Üldiselt võimaldab this Kotlinis selgelt viidata praegusele kontekstile, olgu selleks klassi eksemplar, laiendusobjekt või funktsiooni vastuvõtja, parandades selguse ning vältides nimede konflikte.