Java Academy · Les

De clausule permits

Toegestane subtypen opsommen

Les 2 van 413 stappen

De clausule permits is een gratis Java Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

De permits-clausule

Met de permits-clausule benoemt een sealed type de toegestane subtypen. De clausule komt direct na de typenaam en het sleutelwoord permits.

Basissyntaxis

Vermeld de toegestane subtypen na permits, gescheiden door komma's.

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());
    }
}

Het contract implementeren

Elk benoemd subtype moet daadwerkelijk implements (voor interfaces) of extends (voor klassen) gebruiken voor het sealed type. Een klasse in permits vermelden die dat niet doet, veroorzaakt een compileerfout.

permits weglaten

Als alle toegestane subtypen in hetzelfde bestand als het sealed type zijn gedeclareerd, mag je permits volledig weglaten. De compiler leidt de lijst automatisch af.

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());
    }
}

Wanneer permits verplicht is

Als subtypen in afzonderlijke bestanden binnen hetzelfde pakket of dezelfde module staan, moet je ze expliciet in permits vermelden. De compiler kan niet over bestanden heen afleiden.

De volgorde maakt niet uit

De volgorde van de namen in permits heeft geen semantische betekenis. Deze heeft geen invloed op het gedrag van switch of op iets anders; het is alleen een lijst met toegestane typen.

Een klassenhiërarchie met permits

Dezelfde clausule werkt voor sealed klassen met abstract gedrag.

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());
    }
}

Een subtype vergeten

Als een klasse de sealed interface implementeert maar ontbreekt in permits, mislukt het compileren met een melding dat de klasse niet van het sealed type mag overerven.

Toegestane typen zijn openbare kennis

De lijst in permits maakt deel uit van het contract van het type en wordt vastgelegd in het klassebestand. Hulpmiddelen en de compiler kunnen deze lezen om de volledige verzameling subtypen te kennen.

final- en sealed-kinderen combineren

In een permits-lijst kunnen modifiers worden gecombineerd: sommige kinderen zijn final, andere zijn sealed om de hiërarchie verder uit te bouwen.

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);
    }
}

Aanbevolen werkwijzen

Houd het sealed type en de subtypen voor de leesbaarheid dicht bij elkaar. Laat permits bij kleine hiërarchieën in één bestand bij voorkeur weg en vermeld de typen expliciet wanneer de code over meerdere bestanden is verdeeld.

Korte controle

Test je begrip van de permits-clausule.

Samenvatting

Je hebt de permits-clausule geleerd.

  • De clausule vermeldt de toegestane subtypen na de naam van het sealed type.
  • Elk vermeld type moet van het sealed type overerven of het implementeren.
  • Je kunt de clausule weglaten als alle subtypen hetzelfde bestand delen.
  • Subtypen kunnen zelf sealed zijn om de hiërarchie uit te breiden.
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “De clausule permits” gratis?

Ja — de volledige tekst van “De clausule permits” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “De clausule permits”?

Toegestane subtypen opsommen Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “De clausule permits”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Sealed typen declareren
  2. De clausule permits
  3. Sealed met records
  4. Uitputtende switch op sealed typen
← Terug naar Java Academy