TechHype
Вопросы с собеседований: что такое this в Kotlin
В Kotlin, ключевое слово this используется для ссылки на текущий экземпляр класса.
В Kotlin, ключевое слово this
используется для ссылки на текущий экземпляр класса. Оно может использоваться в следующих случаях:
- В членах класса,
this
ссылается на текущий экземпляр этого класса. - В расширениях функций или функциях с получателем,
this
ссылается на приемник, переданный в качестве параметра. - В квалифицированных выражениях
this
,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"
Дополнительно
-
Интегрированные среды разработки2 недели назад
Лучшая работа с Android Studio: 5 советов
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2024.43
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2024.44
-
Исследования2 недели назад
Поможет ли новая архитектура React Native отобрать лидерство у Flutter в кроссплатформенной разработке?