Sobes.tech
Junior — Middle

Ce restricții există pentru funcțiile de extensie în limbajul Kotlin?

sobes.tech AI

Răspuns de la AI

În Kotlin, funcțiile de extensie au următoarele limitări:

  • Nu pot adăuga noi proprietăți sau stare claselor. Extensiile funcționează doar cu funcții.
  • Extensiile nu modifică clasa reală, ci sunt rezolvate static. Aceasta înseamnă că apelul funcției de extensie este determinat de tipul variabilei în timpul compilării, nu de tipul real al obiectului în timpul execuției.
  • Nu se pot suprascrie metodele existente ale clasei cu extensii. Dacă există deja o metodă cu același nume, va fi apelată metoda clasei.
  • Extensiile nu pot fi declarate în interiorul funcțiilor locale. Ele trebuie declarate la nivel de fișier, clasă sau obiect.

Exemplu de rezolvare statică a extensiilor:

open class Base
class Derived : Base()

fun Base.foo() = "Base"
fun Derived.foo() = "Derived"

fun printFoo(b: Base) {
    println(b.foo())
}

printFoo(Derived()) // Va afișa "Base", deoarece extensia este aleasă după tipul Base

Este important să țineți cont de acest lucru atunci când utilizați funcții de extensie în Kotlin.