Pular para o conteúdo
Início » Domine Sealed Classes no Java e Aperfeiçoe Seu Código

Domine Sealed Classes no Java e Aperfeiçoe Seu Código

Introdução

Na evolução constante da linguagem Java, a introdução das sealed classes and interfaces representa um passo significativo no que tange ao controle de hierarquias de classes e interfaces. Esta funcionalidade, introduzida no Java 17, como parte da JEP 409, tem como objetivo principal proporcionar uma maneira mais granular de controlar o acesso e a formação de subtipos de uma determinada classe ou interface, restringindo quais classes ou interfaces podem ser subtipos de uma entidade específica, resultando em um sistema de tipos mais seguro e um código mais expressivo.

Neste artigo, exploraremos as sealed classes e interfaces, desvendando os princípios que orientam seu uso e as razões por trás de sua criação. Discutiremos as vantagens trazidas por este recurso, como ele contribui para a segurança e a manutenção do código, e como você pode aplicá-lo em seus projetos.

O que são Sealed Classes e Interfaces?

Uma sealed class ou sealed interface é aquela que restringe quais outras interfaces ou classes podem implementá-la ou estendê-la. Ao definir uma interface como selada, o desenvolvedor pode especificar exatamente quais classes têm permissão para serem subtipos dessa interface. Isso é realizado utilizando duas novas palavras-chave: sealed e permits.

Palavras-chave: final, sealed, non-sealed

Quando trabalhamos com classes e interfaces seladas, três palavras-chave são essenciais: final, sealed e non-sealed.

  • sealed: A palavra-chave sealed é usada para indicar que a classe ou interface só pode ser estendida ou implementada por um conjunto específico de classes ou interfaces, o qual deve ser explicitamente declarado.
  • final: Uma classe marcada como final é uma declaração de que ela não pode ser estendida. Em uma interface selada, se uma classe implementadora é marcada como final, isso significa que a cadeia de herança termina com essa classe.
  • non-sealed: O modificador non-sealed é usado para indicar que, embora a classe ou interface seja parte de uma hierarquia selada, ela não impõe restrições adicionais sobre quais classes podem estender ou implementá-la. Isto introduz flexibilidade dentro de uma hierarquia de classes controlada.

Por que foram adicionadas?

  • Manutenção de Código: Restringe o uso de interfaces a um conjunto conhecido de subtipos, facilitando a manutenção e evolução do código.
  • Segurança: Previne que o código de fora de um módulo ou pacote crie subtipos inesperados, o que pode ser importante para preservar invariantes de segurança.
  • Documentação: Serve como documentação explícita do design de uma API, indicando as intenções claras sobre como uma interface deve ser usada.

Exemplos de Uso

Vejamos um exemplo simples que demonstra a definição e utilização de uma interface selada no Java.

public sealed interface Veiculo permits Carro, Caminhao, Motocicleta {
    void ligar();
}
public final class Carro implements Veiculo {
    @Override
    public void ligar() {
    }
}
public final class Caminhao implements Veiculo {
    @Override
    public void ligar() {
    }
}
public non-sealed class Motocicleta implements Veiculo {
    @Override
    public void ligar() {
    }
}

Neste exemplo, Veiculo é uma interface selada que permite implementações somente pelas classes Carro, Caminhao e Motocicleta. A classe Motocicleta é marcada como non-sealed, o que significa que outras classes podem estender Motocicleta, mantendo uma certa flexibilidade na hierarquia.

Além disso, o Java oferece a flexibilidade de definir classes seladas. No exemplo a seguir, ilustramos essa capacidade através da declaração da classe Veiculo como selada, estabelecendo um controle rigoroso sobre sua extensibilidade.

public sealed class Veiculo permits Carro, Caminhao, Motocicleta {
    public void ligar() {
    }
}

Pattern Matching

O pattern matching com switch é uma característica poderosa do Java que combina muito bem com sealed classes e interfaces, pois permite que você faça verificações de tipo e cast de maneira mais elegante e segura. Para uma discussão mais aprofundada sobre o pattern matching com switch, confira nosso post sobre Record Patterns e Pattern Matching onde exploramos em detalhe as possibilidades que este recurso abre para o desenvolvimento em Java.

Conclusão

As interfaces e classes seladas fornecem um método robusto para os desenvolvedores Java definirem hierarquias de classe e interface com intenções claras. As palavras-chave final, sealed, e non-sealed são ferramentas poderosas que, usadas corretamente, podem ajudar a criar uma base de código mais segura, manutenível e expressiva.

Espero que este artigo tenha fornecido uma compreensão clara do que são classes e interfaces seladas, por que foram introduzidas e como podem ser aplicadas no Java. Ao incorporar esse recurso em seus projetos, você estará aproveitando as vantagens que ele oferece para a estruturação de sistemas robustos e bem definidos.


Pronto para turbinar 🚀 seu código com as Sealed Classes em Java? Não pare por aqui!

  • 👉 Deixe um comentário abaixo com suas dúvidas ou insights. Vamos aprender juntos!
  • 📢 Compartilhe este artigo com sua rede e ajude a espalhar conhecimento!
  • 🔔 Siga para mais dicas valiosas e mantenha-se atualizado com as últimas tendências em Java!

Sua jornada para um código mais seguro e eficiente começa agora! 🌟

Referências de Livros para Entrevistas

1 comentário em “Domine Sealed Classes no Java e Aperfeiçoe Seu Código”

  1. Pingback: Java 21: Codifique com Emoção Usando o Novo Suporte a Emojis - A Arte de Programar

Deixe um comentário