Java Academy · Lektion

Satsen permits

Lista tillåtna undertyper.

Lektion 2 av 413 steg

Satsen permits är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Klausulen permits

Klausulen permits anger vilka undertyper en sealed-typ tillåter. Den kommer direkt efter typnamnet och nyckelordet permits.

Grundläggande syntax

Lista de tillåtna undertyperna, separerade med kommatecken, efter permits.

public class Main {
    sealed interface Vehicle permits Car, Truck, Motorcycle {}
    record Car() implements Vehicle {}
    record Truck() implements Vehicle {}
    record Motorcycle() implements Vehicle {}

    public static void main(String[] args) {
        Vehicle v = new Truck();
        System.out.println(v.getClass().getSimpleName());
    }
}

Implementera kontraktet

Varje namngiven undertyp måste faktiskt implements (för gränssnitt) eller extends (för klasser) den förseglade typen. Att ange en klass i permits som inte gör det är ett kompileringsfel.

Utelämna permits

Om alla tillåtna undertyper deklareras i samma fil som den sealed-typen kan Ni utelämna permits helt. Kompilatorn härleder listan automatiskt.

public class Main {
    sealed interface Status {}
    record Active() implements Status {}
    record Inactive() implements Status {}

    public static void main(String[] args) {
        Status s = new Active();
        System.out.println(s.getClass().getSimpleName());
    }
}

När permits krävs

Om undertyper finns i separata filer inom samma paket eller modul måste Ni uttryckligen ange dem i permits. Kompilatorn kan inte härleda dem över flera filer.

Ordningen saknar betydelse

Ordningen på namnen i permits har ingen semantisk betydelse. Den påverkar inte switch-beteendet eller något annat; det är endast en lista över tillåtna typer.

En klasshierarki med permits

Samma klausul fungerar för sealed-klasser med abstrakt beteende.

public class Main {
    sealed static abstract class Node permits Leaf, Branch {
        abstract int size();
    }
    static final class Leaf extends Node {
        int size() { return 1; }
    }
    static final class Branch extends Node {
        final Node a, b;
        Branch(Node a, Node b) { this.a = a; this.b = b; }
        int size() { return a.size() + b.size(); }
    }

    public static void main(String[] args) {
        Node tree = new Branch(new Leaf(), new Branch(new Leaf(), new Leaf()));
        System.out.println("Leaves: " + tree.size());
    }
}

Om en undertyp glöms bort

Om en klass implementerar det sealed-gränssnittet men saknas i permits misslyckas kompileringen med ett meddelande om att klassen inte får ärva från den sealed-typen.

Tillåtna typer är offentlig information

Listan i permits är en del av typens kontrakt och lagras i klassfilen. Verktyg och kompilatorn kan läsa den för att känna till den kompletta uppsättningen undertyper.

Blanda final- och sealed-undertyper

En lista i permits kan blanda modifierare: vissa undertyper kan vara final, medan andra kan vara sealed för att fortsätta hierarkin på djupet.

public class Main {
    sealed interface Shape permits Circle, Polygon {}
    record Circle(double r) implements Shape {}
    sealed interface Polygon extends Shape permits Triangle, Rectangle {}
    record Triangle() implements Polygon {}
    record Rectangle() implements Polygon {}

    public static void main(String[] args) {
        Shape s = new Triangle();
        System.out.println(s instanceof Polygon);
    }
}

Bästa praxis

Håll den sealed-typen och dess undertyper nära varandra för bättre läsbarhet. Föredra att utelämna permits för små hierarkier i en enda fil och ange listan uttryckligen när filerna är uppdelade.

Snabbtest

Testa er förståelse av klausulen permits.

Sammanfattning

Ni har lärt er klausulen permits.

  • Den listar de tillåtna undertyperna efter namnet på den sealed-typen.
  • Varje listad typ måste ärva från eller implementera den sealed-typen.
  • Den kan utelämnas när alla undertyper finns i samma fil.
  • Undertyper kan själva vara sealed för att utöka hierarkin.
Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Satsen permits” gratis?

Ja – hela texten till ”Satsen permits” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Satsen permits”?

Lista tillåtna undertyper. Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Satsen permits”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Deklarera sealed-typer
  2. Satsen permits
  3. Sealed med records
  4. Fullständig switch över sealed
← Tillbaka till Java Academy