Satsen permits
Lista tillåtna undertyper.
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.
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.