Clausola permits
Elencare i sottotipi consentiti
Clausola permits è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
La clausola permits
La clausola permits è il modo in cui un tipo sealed indica i sottotipi consentiti. Viene subito dopo il nome del tipo e la parola chiave permits.
Sintassi di base
Si elencano i sottotipi consentiti, separati da virgole, dopo 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());
}
}Implementare il contratto
Ogni sottotipo nominato deve effettivamente usare implements (per le interfacce) o extends (per le classi) con il tipo sealed. Indicare in permits una classe che non lo fa è un errore di compilazione.
Omettere permits
Se tutti i sottotipi consentiti sono dichiarati nello stesso file del tipo sealed, si può omettere completamente permits. Il compilatore deduce automaticamente l'elenco.
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());
}
}Quando permits è obbligatorio
Se i sottotipi si trovano in file separati all'interno dello stesso package o modulo, è necessario elencarli esplicitamente in permits. Il compilatore non può dedurre l'elenco tra file diversi.
L'ordine non è importante
L'ordine dei nomi in permits non ha alcun significato semantico. Non influisce sul comportamento di switch né su altro: è semplicemente un elenco dei tipi consentiti.
Una gerarchia di classi con permits
La stessa clausola funziona per le classi sealed con comportamento astratto.
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());
}
}Dimenticare un sottotipo
Se una classe implementa l'interfaccia sealed ma manca in permits, la compilazione fallisce con un messaggio che indica che la classe non può estendere il tipo sealed.
I tipi consentiti sono informazioni pubbliche
L'elenco permits fa parte del contratto del tipo e viene registrato nel file della classe. Gli strumenti e il compilatore possono leggerlo per conoscere l'insieme completo dei sottotipi.
Combinare figli final e sealed
Un elenco permits può combinare diversi modificatori: alcuni figli possono essere final, mentre altri possono essere sealed per continuare la gerarchia a un livello più profondo.
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);
}
}Buone pratiche
Si tenga il tipo sealed vicino ai suoi sottotipi per migliorare la leggibilità. Si preferisca omettere permits per le gerarchie piccole contenute in un singolo file e lo si elenchi esplicitamente quando i file sono separati.
Verifica rapida
Verifichi la Sua comprensione della clausola permits.
Riepilogo
Ha imparato a usare la clausola permits.
- Elenca i sottotipi consentiti dopo il nome del tipo sealed.
- Ogni tipo elencato deve estendere o implementare il tipo sealed.
- Può essere omessa quando tutti i sottotipi condividono lo stesso file.
- I sottotipi possono a loro volta essere sealed per estendere la gerarchia.
Domande Frequenti
La lezione «Clausola permits» è gratuita?
Sì — il testo completo di «Clausola permits» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «Clausola permits»?
Elencare i sottotipi consentiti Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Clausola permits»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.