0Pricing
Java Academy · Aula

Cláusula permits

Liste os subtipos permitidos.

Cláusula permits é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

A Cláusula permits

A cláusula permits é a forma como um tipo selado nomeia seus subtipos permitidos. Ela vem logo depois do nome do tipo e da palavra-chave permits.

Sintaxe Básica

Liste os subtipos permitidos, separados por vírgulas, depois de 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());
    }
}

Implementando o Contrato

Cada subtipo nomeado deve realmente implements (para interfaces) ou extends (para classes) o tipo selado. Nomear em permits uma classe que não faça isso gera um erro de compilação.

Omitindo permits

Se todos os subtipos permitidos forem declarados no mesmo arquivo que o tipo selado, você poderá omitir permits por completo. O compilador deduz a lista automaticamente.

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 É Necessário

Se os subtipos estiverem em arquivos separados dentro do mesmo pacote ou módulo, você deverá listá-los explicitamente em permits. O compilador não consegue deduzir a lista entre arquivos.

A Ordem Não Importa

A ordem dos nomes em permits não tem significado semântico. Ela não afeta o comportamento da seleção nem qualquer outra coisa; é apenas uma lista de tipos permitidos.

Uma Hierarquia de Classes com permits

A mesma cláusula funciona para classes seladas com comportamento abstract.

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

Esquecendo um Subtipo

Se uma classe implementar a interface selada, mas estiver ausente de permits, a compilação falhará com uma mensagem informando que a classe não tem permissão para estender o tipo selado.

Tipos Permitidos São Conhecidos Publicamente

A lista permits faz parte do contrato do tipo e é registrada no arquivo da classe. As ferramentas e o compilador podem lê-la para conhecer o conjunto completo de subtipos.

Combinando Subtipos Finais e Selados

Uma lista permits pode combinar modificadores: alguns subtipos podem ser final, enquanto outros podem ser sealed para continuar a hierarquia em níveis mais profundos.

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

Práticas Recomendadas

Mantenha o tipo selado e seus subtipos próximos para facilitar a leitura. Prefira omitir permits em hierarquias pequenas de um único arquivo e liste os subtipos explicitamente quando os arquivos forem separados.

Verificação Rápida

Teste sua compreensão sobre a cláusula permits.

Recapitulação

Você aprendeu sobre a cláusula permits.

  • Ela lista os subtipos permitidos depois do nome do tipo selado.
  • Cada tipo listado deve estender ou implementar o tipo selado.
  • Ela pode ser omitida quando todos os subtipos compartilham o mesmo arquivo.
  • Os próprios subtipos podem ser selados para estender a hierarquia.

Perguntas Frequentes

A aula “Cláusula permits” é grátis?

Sim — o texto completo de “Cláusula permits” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Cláusula permits”?

Liste os subtipos permitidos. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Cláusula permits”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Declarando tipos selados
  2. Cláusula permits
  3. Tipos selados com registros
  4. switch exaustivo sobre tipos selados
← Voltar para Java Academy