Java Academy · Lektion

permits-Klausel

Erlaubte Untertypen auflisten

Lektion 2 von 413 Schritte

permits-Klausel ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Die permits-Klausel

Über die permits-Klausel benennt ein versiegelter Typ seine erlaubten Untertypen. Sie steht direkt nach dem Typnamen und dem Schlüsselwort permits.

Grundlegende Syntax

Listen Sie die erlaubten Untertypen nach permits, durch Kommas getrennt, auf.

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

Den Vertrag implementieren

Jeder benannte Untertyp muss den versiegelten Typ tatsächlich implements (bei Interfaces) oder extends (bei Klassen). Eine Klasse in permits zu benennen, die dies nicht tut, führt zu einem Compile-Fehler.

permits weglassen

Wenn alle erlaubten Untertypen in derselben Datei wie der versiegelte Typ deklariert sind, können Sie permits vollständig weglassen. Der Compiler leitet die Liste automatisch ab.

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

Wann permits erforderlich ist

Wenn sich Untertypen in separaten Dateien innerhalb desselben Pakets oder Moduls befinden, müssen Sie sie explizit in permits auflisten. Der Compiler kann die Liste nicht dateiübergreifend ableiten.

Die Reihenfolge spielt keine Rolle

Die Reihenfolge der Namen in permits hat keine semantische Bedeutung. Sie wirkt sich weder auf das Verhalten von switch noch auf etwas anderes aus; sie ist lediglich eine Liste erlaubter Typen.

Eine Klassenhierarchie mit permits

Dieselbe Klausel funktioniert auch für versiegelte Klassen mit abstraktem Verhalten.

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

Einen Untertyp vergessen

Wenn eine Klasse das versiegelte Interface implementiert, aber in permits fehlt, schlägt die Kompilierung mit einer Meldung fehl, dass die Klasse den versiegelten Typ nicht erweitern darf.

Erlaubte Typen sind öffentlich bekannt

Die Liste in permits ist Teil des Vertrags des Typs und wird in der Klassendatei aufgezeichnet. Werkzeuge und der Compiler können sie lesen, um die vollständige Menge der Untertypen zu kennen.

final- und sealed-Kinder kombinieren

Eine permits-Liste kann verschiedene Modifikatoren kombinieren: Einige Untertypen sind final, andere sealed, um die Hierarchie weiter zu vertiefen.

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

Bewährte Vorgehensweisen

Halten Sie den versiegelten Typ und seine Untertypen aus Gründen der Lesbarkeit nahe beieinander. Lassen Sie permits bei kleinen Hierarchien in einer einzigen Datei bevorzugt weg, und listen Sie die Untertypen explizit auf, wenn die Dateien aufgeteilt sind.

Schnelltest

Testen Sie Ihr Verständnis der permits-Klausel.

Zusammenfassung

Sie haben die permits-Klausel kennengelernt.

  • Sie listet die erlaubten Untertypen nach dem Namen des versiegelten Typs auf.
  • Jeder aufgelistete Typ muss den versiegelten Typ erweitern oder implementieren.
  • Sie kann weggelassen werden, wenn alle Untertypen dieselbe Datei verwenden.
  • Untertypen können selbst sealed sein, um die Hierarchie zu erweitern.
Kostenlos starten

Lerne Java mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
104
Lektionen
374

Häufig gestellte Fragen

Ist die Lektion „permits-Klausel“ kostenlos?

Ja — der vollständige Text von „permits-Klausel“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „permits-Klausel“?

Erlaubte Untertypen auflisten Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „permits-Klausel“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Versiegelte Typen deklarieren
  2. permits-Klausel
  3. Sealed mit Records
  4. Vollständiger switch für Sealed-Typen
← Zurück zu Java Academy