Déclarer des types scellés
Limitez les types pouvant étendre un type
Déclarer des types scellés est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.
Que sont les types scellés
Une classe ou une interface scellée limite les autres types qui peuvent l'étendre ou l'implémenter. Cela vous permet de modéliser un ensemble fermé de possibilités que le compilateur peut prendre en compte.
Le problème résolu
Une classe public normale peut être étendue par n'importe qui, n'importe où. Vous pouvez parfois vouloir exactement trois formes ou deux types de paiement, sans comportement imprévu. Le scellement rend cette intention explicite et l'impose.
Le mot-clé de scellement
Déclarez un type sealed et indiquez ses sous-types autorisés avec permits. Chaque sous-type autorisé doit déclarer son propre modificateur d'héritage.
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
public static void main(String[] args) {
Shape s = new Circle(2.0);
System.out.println(s);
}
}Modificateurs des sous-types
Chaque sous-type autorisé doit être l'un des suivants : final (aucune extension supplémentaire), sealed (la restriction continue) ou non-sealed (l'extension est de nouveau libre). Les enregistrements sont implicitement final.
Une sous-classe finale
Déclarer une sous-classe final ferme la hiérarchie à cette branche.
public class Main {
sealed interface Animal permits Dog, Cat {}
static final class Dog implements Animal {
public String toString() { return "Dog"; }
}
static final class Cat implements Animal {
public String toString() { return "Cat"; }
}
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a);
}
}Une sous-classe non scellée
Un sous-type non-sealed rouvre volontairement la possibilité d'extension, ce qui permet à des classes inconnues de l'étendre à nouveau. Utilisez cette option avec parcimonie lorsqu'une branche doit rester ouverte.
public class Main {
sealed interface Plugin permits CorePlugin, ExternalPlugin {}
static final class CorePlugin implements Plugin {}
static non-sealed class ExternalPlugin implements Plugin {}
static class ThirdParty extends ExternalPlugin {}
public static void main(String[] args) {
Plugin p = new ThirdParty();
System.out.println(p.getClass().getSimpleName());
}
}Les classes peuvent aussi être scellées
Le scellement ne se limite pas aux interfaces. Une sealed class abstraite fonctionne de la même manière et peut contenir un état et un comportement partagés.
public class Main {
sealed static abstract class Expr permits Num, Add {}
static final class Num extends Expr {
final int value;
Num(int value) { this.value = value; }
}
static final class Add extends Expr {
final Expr left, right;
Add(Expr left, Expr right) { this.left = left; this.right = right; }
}
public static void main(String[] args) {
Expr e = new Add(new Num(1), new Num(2));
System.out.println(e.getClass().getSimpleName());
}
}Même module ou même paquet
Les sous-types autorisés doivent se trouver dans le même module que le type scellé, ou dans le même paquet si le code n'est pas modulaire. Cela permet de conserver l'ensemble fermé au même endroit et de le vérifier.
Vérification par le compilateur
Si une classe tente d'étendre un type scellé sans figurer dans permits, le code ne compile pas. L'ensemble fermé est garanti au moment de la compilation.
Pourquoi c'est important
Comme le compilateur connaît tous les sous-types, il peut vérifier qu'une switch sur le type scellé traite tous les cas. C'est la base de la correspondance exhaustive de motifs, étudiée dans un cours ultérieur.
Une hiérarchie complète
Voici une petite hiérarchie fermée utilisée comme modèle de valeurs.
public class Main {
sealed interface Json permits JsonNull, JsonNumber, JsonString {}
record JsonNull() implements Json {}
record JsonNumber(double value) implements Json {}
record JsonString(String value) implements Json {}
public static void main(String[] args) {
Json[] values = { new JsonNull(), new JsonNumber(3.5), new JsonString("hi") };
for (Json j : values) {
System.out.println(j);
}
}
}Vérification rapide
Vérifiez votre compréhension des déclarations scellées.
Récapitulatif
Vous avez appris à déclarer des types scellés.
sealedlimite les types qui peuvent étendre ou implémenter un type.- La clause
permitsrépertorie les sous-types autorisés. - Chaque sous-type doit être
final,sealedounon-sealed. - Les sous-types se trouvent dans le même module ou paquet, et cette règle est appliquée par le compilateur.
Questions Fréquemment Posées
La leçon « Déclarer des types scellés » est-elle gratuite ?
Oui — le texte complet de « Déclarer des types scellés » 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 « Déclarer des types scellés » ?
Limitez les types pouvant étendre un type 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 1 sur 4.
Combien de temps prend la leçon « Déclarer des types scellés » ?
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
- Déclarer des types scellés
- Clause permits
- Types scellés avec des enregistrements
- switch exhaustif sur un type scellé