Java Academy · Leçon

Clause permits

Répertoriez les sous-types autorisés

Leçon 2 sur 413 étapes

Clause permits est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

La clause d'autorisation

La clause permits permet à un type scellé de nommer ses sous-types autorisés. Elle vient juste après le nom du type et le mot-clé correspondant.

Syntaxe de base

Répertoriez les sous-types autorisés, séparés par des virgules, après 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());
    }
}

Respecter le contrat

Chaque sous-type nommé doit effectivement implements (pour les interfaces) ou extends (pour les classes) le type scellé. Nommer dans permits une classe qui ne le fait pas provoque une erreur de compilation.

Omettre la clause d'autorisation

Si tous les sous-types autorisés sont déclarés dans le même fichier que le type scellé, vous pouvez omettre entièrement permits. Le compilateur déduit automatiquement la liste.

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

Quand la clause d'autorisation est requise

Si les sous-types se trouvent dans des fichiers séparés au sein du même paquet ou module, vous devez les répertorier explicitement dans permits. Le compilateur ne peut pas déduire la liste entre plusieurs fichiers.

L'ordre n'a pas d'importance

L'ordre des noms dans permits n'a aucune signification sémantique. Il ne modifie ni le comportement de la sélection ni quoi que ce soit d'autre ; il s'agit simplement d'une liste de types autorisés.

Une hiérarchie de classes avec une clause d'autorisation

La même clause fonctionne avec des classes scellées qui possèdent un comportement abstrait.

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

Oublier un sous-type

Si une classe implémente l'interface scellée mais ne figure pas dans permits, la compilation échoue avec un message indiquant que la classe n'est pas autorisée à étendre le type scellé.

Les types autorisés sont connus publiquement

La liste permits fait partie du contrat du type et est enregistrée dans le fichier de classe. Les outils et le compilateur peuvent la lire pour connaître l'ensemble complet des sous-types.

Mélanger des sous-types finaux et scellés

Une liste permits peut mélanger les modificateurs : certains sous-types peuvent être final, tandis que d'autres peuvent être sealed pour prolonger la hiérarchie.

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

Bonnes pratiques

Gardez le type scellé et ses sous-types proches les uns des autres pour faciliter la lecture. Préférez omettre permits pour les petites hiérarchies contenues dans un seul fichier, et utilisez une liste explicite lorsque le code est réparti entre plusieurs fichiers.

Vérification rapide

Vérifiez votre compréhension de la clause d'autorisation.

Récapitulatif

Vous avez appris à utiliser la clause permits.

  • Elle répertorie les sous-types autorisés après le nom du type scellé.
  • Chaque type répertorié doit étendre ou implémenter le type scellé.
  • Elle peut être omise lorsque tous les sous-types se trouvent dans le même fichier.
  • Les sous-types peuvent eux-mêmes être scellés pour prolonger la hiérarchie.
Gratuit pour commencer

Apprends Java avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
104
Leçons
374

Questions Fréquemment Posées

La leçon « Clause permits » est-elle gratuite ?

Oui — le texte complet de « Clause permits » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Clause permits » ?

Répertoriez les sous-types autorisés Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Clause permits » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Déclarer des types scellés
  2. Clause permits
  3. Types scellés avec des enregistrements
  4. switch exhaustif sur un type scellé
← Retour à Java Academy