0Pricing
Java Academy · Lección

requires y exports

Controle las dependencias y la visibilidad

requires y exports es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Controlar el grafo de módulos

Dos directivas determinan el grafo de módulos: requires declara de qué depende el módulo y exports declara qué expone.

En esta lección se exploran sus variantes y las reglas de legibilidad y accesibilidad que establecen.

requires simple

Un requires X; simple significa «este módulo lee el módulo X». Su código puede utilizar los tipos públicos exportados por X, pero los consumidores de su módulo no obtienen ninguna información sobre X.

module com.example.app {
    requires java.sql;
}

requires transitive

requires transitive Y; significa que cualquier módulo que lea al suyo también leerá Y. Esto es la legibilidad implícita, útil cuando su API expone tipos de Y.

module com.example.api {
    requires transitive java.sql;
}

Cuándo usar transitive

Use transitive cuando un método de su API exportada devuelva o acepte un tipo de otro módulo. De lo contrario, quienes llamen al método ni siquiera podrían especificar el tipo de retorno sin declarar su propio requires.

Así evita que los consumidores tengan que declarar dependencias redundantes.

requires static

requires static Z; declara una dependencia solo en tiempo de compilación. El módulo es necesario para compilar, pero es opcional en tiempo de ejecución; resulta ideal para procesadores de anotaciones o integraciones opcionales.

module com.example.app {
    requires static com.example.annotations;
}

exports simple

exports pkg; hace que los tipos públicos de pkg sean accesibles para todos los módulos que requieran el suyo.

module com.example.lib {
    exports com.example.lib.api;
}

Exportaciones cualificadas

Una exportación cualificada revela un paquete únicamente a módulos específicos con nombre mediante exports pkg to modA, modB;. Resulta útil para módulos amigos dentro de un sistema más grande.

module com.example.core {
    exports com.example.core.internal to com.example.web, com.example.batch;
}

opens para la reflexión

exports concede acceso en compilación y en tiempo de ejecución a los miembros públicos. La reflexión profunda (por ejemplo, sobre campos privados) requiere opens pkg; en su lugar, como ocurre con frameworks como Jackson o Hibernate.

module com.example.model {
    exports com.example.model;
    opens com.example.model.entities to com.fasterxml.jackson.databind;
}

Módulos open

Si un módulo completo necesita acceso mediante reflexión, algo habitual con frameworks antiguos, declárelo como open. Todos sus paquetes quedan abiertos a la reflexión, aunque las exports normales siguen controlando el acceso en compilación.

open module com.example.beans {
    requires java.logging;
}

Legibilidad frente a accesibilidad

Deben cumplirse ambas condiciones para utilizar un tipo de otro módulo:

  • Legibilidad: su módulo declara requires para el otro
  • Accesibilidad: el otro módulo exporta el paquete y el tipo es público

Si falta cualquiera de las dos, el compilador rechaza su código.

Integrarlo todo

Un módulo bien formado que vuelve a exponer tipos de JDBC y abre las entidades para una biblioteca JSON:

module com.example.service {
    requires transitive java.sql;
    requires static com.example.annotations;

    exports com.example.service.api;
    exports com.example.service.spi to com.example.plugins;
    opens com.example.service.dto to com.fasterxml.jackson.databind;
}

Comprobación rápida

Elija la directiva para los tipos de API que se vuelven a exponer.

Resumen

Ha aprendido las directivas de dependencia y visibilidad:

  • requires, requires transitive, requires static
  • exports y exports ... to cualificado
  • opens y open module para la reflexión
  • Para usar un tipo se necesitan tanto legibilidad como accesibilidad

A continuación: desacoplamiento mediante servicios con provides y uses.

Preguntas frecuentes

¿La lección «requires y exports» es gratis?

Sí — el texto completo de «requires y exports» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «requires y exports»?

Controle las dependencias y la visibilidad Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «requires y exports»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. module-info.java
  2. requires y exports
  3. Servicios con provides/uses
  4. Migración a módulos
← Volver a Java Academy