Ключевое слово this

Ключевое слово this представляет ссылку на текущий объект класса. Оно используется для доступа к полям и методам объекта, разрешения конфликтов имен между параметрами конструктора и полями класса, а также для вызова других конструкторов того же класса.

Синтаксис

kotlinthis // ссылка на текущий объект
this.property // доступ к свойству текущего объекта
this.method() // вызов метода текущего объекта
this@ClassName // квалифицированное обращение к внешнему объекту

Пример

Использование this для доступа к свойству класса:

kotlinclass Person {
  var name: String = ""
  
  fun setName(name: String) {
    this.name = name
  }
  
  fun printName() {
    println("Name: ${this.name}")
  }
}

val person = Person()
person.setName("John")
person.printName()

Результат выполнения кода:

kotlinName: John

Пример

Разрешение конфликта имен между параметром конструктора и полем класса:

kotlinclass Car(val brand: String) {
  var speed: Int = 0
  
  constructor(brand: String, speed: Int) : this(brand) {
    this.speed = speed
  }
}

val car = Car("Toyota", 120)
println("Brand: ${car.brand}, Speed: ${car.speed}")

Результат выполнения кода:

kotlinBrand: Toyota, Speed: 120

Пример

Использование квалифицированного this для доступа к внешнему классу из внутреннего:

kotlinclass Outer {
  val outerProperty: String = "outer"
  
  inner class Inner {
    val innerProperty: String = "inner"
    
    fun printProperties() {
      println("Inner property: ${this.innerProperty}")
      println("Outer property: ${this@Outer.outerProperty}")
    }
  }
}

val outer = Outer()
val inner = outer.Inner()
inner.printProperties()

Результат выполнения кода:

kotlinInner property: inner
Outer property: outer

Пример

Использование this для вызова другого конструктора:

kotlinclass Rectangle {
  var width: Int
  var height: Int
  
  constructor(size: Int) : this(size, size)
  
  constructor(width: Int, height: Int) {
    this.width = width
    this.height = height
  }
  
  fun area(): Int {
    return this.width * this.height
  }
}

val square = Rectangle(5)
val rectangle = Rectangle(3, 4)

println("Square area: ${square.area()}")
println("Rectangle area: ${rectangle.area()}")

Результат выполнения кода:

kotlinSquare area: 25
Rectangle area: 12

Пример

Использование this в расширениях (extension functions):

kotlinfun String.addPrefix(prefix: String): String {
  return prefix + this
}

val result = "World".addPrefix("Hello ")
println(result)

Результат выполнения кода:

kotlinHello World

Смотрите также

  • ключевое слово super,
    которое используется для доступа к членам родительского класса
  • ключевое слово class,
    которое используется для объявления классов
  • ключевое слово constructor,
    которое используется для объявления конструкторов
  • ключевое слово inner,
    которое используется для объявления внутренних классов