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
requirespara 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 staticexportsyexports ... tocualificadoopensyopen modulepara 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
- module-info.java
- requires y exports
- Servicios con provides/uses
- Migración a módulos