Site icon AppTractor

Вопросы с собеседований: что такое this в Kotlin

В Kotlin, ключевое слово this используется для ссылки на текущий экземпляр класса. Оно может использоваться в следующих случаях:

В членах класса

В членах класса, this используется для доступа к свойствам и методам текущего экземпляра класса. Например, следующий код определяет класс Person с свойством name и методом sayHello():

class Person(val name: String) {
    fun sayHello() {
        println("Hello, my name is ${this.name}")
    }
}

В этом коде, this.name ссылается на свойство name текущего экземпляра класса Person.

В расширениях функций или функциях с ресивером

Расширения функций и функции с получателем позволяют добавлять новые функции или методы существующим классам. В этих случаях, this ссылается на приемник, переданный в качестве параметра. Например, следующий код определяет расширение функции printName() для класса Person:

fun Person.printName() {
    println(this.name)
}

В этом коде, this ссылается на экземпляр класса Person, который был передан в качестве параметра функции printName().

В квалифицированных выражениях this

Квалифицированные выражения this используются для доступа к экземпляру внешнего класса из внутреннего класса или функции. Для этого, this дополняется именем внешнего класса. Например, следующий код определяет вложенный класс Inner в классе Outer:

class Outer {
    class Inner {
        fun foo() {
            println(this@Outer.name)
        }
    }

    val name = "Outer"
}

В этом коде, this@Outer ссылается на экземпляр класса Outer.

Вот несколько примеров использования ключевого слова this в Kotlin:

// В членах класса
class Person(val name: String) {
    fun sayHello() {
        println("Hello, my name is ${this.name}")
    }
}

val person = Person("John Doe")
person.sayHello() // Выведет "Hello, my name is John Doe"

// В расширениях функций или функциях с получателем
fun Person.printName() {
    println(this.name)
}

person.printName() // Выведет "John Doe"

// В квалифицированных выражениях this
class Outer {
    class Inner {
        fun foo() {
            println(this@Outer.name)
        }
    }

    val name = "Outer"
}

val outer = Outer()
val inner = outer.Inner()
inner.foo() // Выведет "Outer"

Дополнительно

 

Exit mobile version