Avgrensede typeparametere med extends
Begrens hva en generisk type kan ta imot.
Avgrensede typeparametere med extends er en gratis leksjon i Dart Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Dart Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Dart Academy inneholder totalt 4 leksjoner.
Når én hvilken som helst type blir for mye
En vanlig typeparameter godtar alle typer, men noen ganger trenger du mer. Det kan hende du må kalle en metode som bare finnes på bestemte typer. 🔒
Typebegrensningen med extends
Du kan legge til en typebegrensning ved hjelp av extends. Det betyr at typeparameteren må være en bestemt type eller en undertype av den.
class Cage<T extends Animal> {}Hva en typebegrensning garanterer
Inne i klassen stoler Dart nå på at T er minst en Animal. Derfor kan du trygt bruke alle medlemmer som Animal definerer.
class Cage<T extends Animal> {
void feed(T a) => a.eat();
}Avvise ugyldige typer
Kompilatoren blokkerer alle typeargumenter som ikke oppfyller typebegrensningen. Det blir umiddelbart rapportert som en feil hvis du sender inn en ubeslektet type.
Cage<String>();En numerisk typebegrensning
En vanlig typebegrensning er num, som er overtypen til int og double. Den lar en generisk type utføre aritmetikk og samtidig godta begge talltypene.
T addOne<T extends num>(T x) => x + 1 as T;Typebegrensninger på metoder
Typebegrensninger fungerer også på generiske metoder, ikke bare på klasser. Plasser extends rett etter typeparameterens navn i metoden.
num biggest<T extends num>(List<T> xs) =>
xs.reduce((a, b) => a > b ? a : b);Standardbegrensningen er Object
Når du utelater en typebegrensning, er den implisitte begrensningen Object?. Derfor kan en T uten begrensning bare bruke medlemmer som alle objekter har.
Comparable-begrensning
Hvis du skal sortere eller sammenligne, bruker du Comparable som begrensning. Da kan du kalle compareTo på verdiene i den generiske koden.
T max<T extends Comparable<T>>(T a, T b) =>
a.compareTo(b) >= 0 ? a : b;Typebegrensninger dokumenterer hensikten
En typebegrensning forteller også leserne hvilke typer som hører hjemme her. Selve signaturen forklarer kontrakten koden din forventer.
Selvrefererende typebegrensninger
Legg merke til at T kan forekomme i sin egen typebegrensning, som i T extends Comparable av T. Dette mønsteret knytter en type til operasjoner på seg selv.
Hold typebegrensningene minimale
Bruk den minst restriktive typebegrensningen som fortsatt fungerer. For strenge begrensninger utelukker gyldige typer, mens ingen begrensning gjør nyttige metoder utilgjengelige.
Hurtigsjekk
Hva lar en typebegrensning deg gjøre inne i klassen?
Oppsummering
Du har brukt extends til å begrense en typeparameter. Dermed får du tilgang til metodene på den begrensede typen, samtidig som ubeslektede typer avvises. Hold begrensningene så åpne som oppgaven tillater. ✅
Lær deg Dart med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Avgrensede typeparametere med extends» gratis?
Ja – hele teksten i «Avgrensede typeparametere med extends» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Dart Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Dart Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Avgrensede typeparametere med extends»?
Begrens hva en generisk type kan ta imot. Du øver på Dart Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Dart Academy?
Ingen tidligere erfaring er nødvendig. Dart Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Avgrensede typeparametere med extends»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Dart Academy-leksjonen?
Ja. Alle Dart Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Derfor er generiske typer bedre enn dynamic
- Generiske klasser og metoder
- Avgrensede typeparametere med extends
- Generiske samlinger i praksis