To denote the current receiver, we use this expressions:
- In a member of a class, this refers to the current object of that class
- this<Supertype> is used to qualified calls to supertype's implementations of members, see Classes and Inheritance#Overriding rules
- In an extension function or an extension function literal, this denotes the receiver parameter that is passed on the left-hand side of a dot.
If this has no qualifiers, it refers to the innermost enclosing scope. To refer to this in other scopes, label qualifiers are used:
Qualified this
To access this from an outer scope (a class, or extension function, or labeled extension function literal) one writes this@label where @label is a label on the scope this is meant to be from:
class A { // implicit label @A class B { // implicit label @B fun Int.foo() { // implicit label @foo val a = this@A // A's this val b = this@B // B's this val c = this // foo()'s receiver, an Int val c1 = this@foo // foo()'s receiver, an Int val funLit = {String.() -> // implicit label @ val d = this // funLit's receiver val d1 = this@ // funLit's receiver } val funLit2 = { (s:String) -> val d1 = this // foo()'s receiver, since enclosing function literal doesn't have any receiver } } } }What's next
Labels:
None
