typealias in Kotlin is een mechanisme om een alternatieve naam voor een bestaand type (klasse, interface, functie, generiek type, etc.) te verklaren. Het wordt gebruikt voor:
Beperkingen:
Voorbeeld van gebruik:
typealias ClickHandler = (View, MotionEvent) -> Unit fun setClickHandler(handler: ClickHandler) { // ... } val handler: ClickHandler = { view, event -> // Logica voor verwerking }
Ondersteuning en leesbaarheid:
Vraag: "Zijn typealias in Kotlin nieuwe types vanuit het perspectief van de compiler en kunnen ze worden gebruikt voor het beperken van de waarden van variabelen?"
Antwoord: Nee, typealias is alleen een synoniem voor een type. Ze vormen geen nieuw type en bieden geen extra controle tijdens compilatie. Alle functies, variabelen en parameters van type typealias zijn gewoon het oorspronkelijke type.
Voorbeeld:
typealias UserId = String typealias Email = String fun process(id: UserId) {} fun process(email: Email) {} process("abc@def.com") // Geen fout — kan niet worden onderscheiden!
Verhaal
We gebruikten typealias voor identificaties van verschillende entiteiten (UserId, OrderId), gokten dat de compiler ze zou onderscheiden, maar in werkelijkheid gaven we waarden aan elkaar door zonder compile-time fouten, wat leidde tot mengeling van logica en bugs.
Verhaal
Bij de migratie van een oude API hebben we complexe lambda-expressies typealias gegeven, maar in de documentatie geen nieuwe definities vermeld. Het resultaat - programmeurs begrepen niet wat de alias betekende (bijvoorbeeld, Loader), en gebruikten het verkeerd, wat leidde tot runtime-fouten.
Verhaal
In een van de projecten hebben we typealias ViewClickHandler in verschillende bestanden met verschillende handtekeningen opnieuw gedefinieerd, in de veronderstelling dat aliassen globaal zouden zijn. Uiteindelijk - bij het automatisch genereren van documentatie was er duplicatie, en bij compilatie ontstond er een naamconflict.