Junior — Middle
Czy funkcja rozszerzenia w Kotlinie jest zawsze statyczna w obrębie implementacji?
sobes.tech AI
Odpowiedź od AI
Tak, w Kotlin funkcje rozszerzeń są implementowane jako statyczne metody na poziomie bytecode JVM. Chociaż składniowo wyglądają jak metody dodane do istniejących klas, w rzeczywistości nie zmieniają klasy i nie mają dostępu do prywatnych członków.
Oznacza to, że wewnątrz implementacji funkcji rozszerzenia nie ma odwołania do instancji klasy (this) w sensie zwykłych metod. Zamiast tego, pierwszy parametr funkcji rozszerzenia to obiekt, do którego jest ona stosowana.
Przykład:
fun String.lastChar(): Char = this.get(this.length - 1)
W bajtkodzie będzie to wyglądało jak statyczna metoda przyjmująca obiekt String jako parametr.
W związku z tym funkcje rozszerzeń w Kotlinie są zawsze statyczne w swojej implementacji, choć wyglądają jak metody instancji.