typealias w Kotlinie to mechanizm deklarowania alternatywnej nazwy dla istniejącego typu (klasy, interfejsu, funkcji, typu ogólnego itp.). Używany do:
Ograniczenia:
Przykład zastosowania:
typealias ClickHandler = (View, MotionEvent) -> Unit fun setClickHandler(handler: ClickHandler) { // ... } val handler: ClickHandler = { view, event -> // Logika obsługi }
Wsparcie i czytelność:
Pytanie: "Czy typealias w Kotlinie są nowymi typami z perspektywy kompilatora i czy można je wykorzystać do ograniczenia wartości zmiennych?"
Odpowiedź: Nie, typealias to tylko synonim typu. Nie tworzą nowego typu i nie zapewniają żadnego dodatkowego sprawdzenia na etapie kompilacji. Wszystkie funkcje, zmienne i parametry z typu typealias to ten sam oryginalny typ.
Przykład:
typealias UserId = String typealias Email = String fun process(id: UserId) {} fun process(email: Email) {} process("abc@def.com") // Brak błędu — nie można rozróżnić!
Historia
Używano typealias dla identyfikatorów różnych bytów (UserId, OrderId), zakładając, że kompilator je rozróżni, ale w rzeczywistości przekazywano sobie wartości bez błędów kompilacji, co prowadziło do pomieszania logiki i błędów.
Historia
Przy migracji z starego API przypisano skomplikowanym wyrażeniom lambda typealias, ale w dokumentacji nie podano nowych definicji. W rezultacie programiści nie rozumieli, co oznacza alias (na przykład, Loader), i stosowali go błędnie, co wywołało błędy w czasie wykonywania.
Historia
W jednym z projektów nadpisano typealias ViewClickHandler w różnych plikach z różnymi sygnaturami, myśląc, że aliasy będą związane globalnie. W efekcie — podczas autogeneracji dokumentacji pojawiło się duplikowanie, a przy kompilacji wystąpił konflikt nazw.