Palavra-chave requires

A palavra-chave requires foi introduzida no Java 9 como parte do Java Platform Module System (JPMS), também conhecido como Project Jigsaw. Ela é usada no arquivo de definição do módulo (module-info.java) para declarar uma dependência de um módulo em relação a outro.

O que faz a palavra-chave requires?

  • requires é usada para especificar que o módulo atual depende de outro módulo para compilar e executar.
  • Esse mecanismo ajuda a modularizar o código, garantindo que um módulo só possa usar as APIs que são explicitamente declaradas como dependências.

Sintaxe Básica:

Dentro do arquivo module-info.java, você usa requires para declarar uma dependência de outro módulo.

Exemplo:

module meu.modulo {
requires outro.modulo;
}

Nesse exemplo:

  • meu.modulo declara que depende de outro.modulo.
  • Isso significa que meu.modulo pode usar as APIs exportadas por outro.modulo.

Variantes da Palavra-chave requires:

1.requires static:

module meu.modulo {
    requires static outro.modulo;
}

2.requires transitive:

module meu.modulo {
    requires transitive outro.modulo;
}

Com requires transitive, se um módulo A depende de B e B depende de C, então A também terá acesso a C.

Exemplo Completo:

1.Módulo A:

module moduloA {
    requires moduloB;
}

2.Módulo B:

module moduloB {
    requires transitive moduloC;
}

3.Módulo C:

module moduloC {
    // Define exports and provides here
}

Nesse caso, um módulo que depende de moduloA terá acesso a moduloC devido à dependência transitiva.

Benefícios do Uso de requires:

  • Encapsulamento: Permite que você declare explicitamente quais módulos são necessários, promovendo um melhor encapsulamento e evitando acoplamentos ocultos.
  • Verificação: Garante que todas as dependências estejam disponíveis durante a compilação e execução.
  • Modularidade: Facilita a modularização do código, permitindo a construção de sistemas mais complexos e escaláveis de forma mais controlada e organizada.

A palavra-chave requires é fundamental para o sistema de módulos do Java, pois ajuda a definir e gerenciar dependências entre diferentes partes de um sistema, promovendo uma arquitetura mais modular e organizada.