Buscar..


Sintaxis

  • requiere java.xml;
  • requiere java.xml público; # expone el módulo a dependientes para su uso
  • exportaciones com.example.foo; # dependientes pueden usar tipos públicos en este paquete
  • exporta com.example.foo.impl a com.example.bar; # restringir el uso a un módulo

Observaciones

Se recomienda el uso de módulos, pero no es obligatorio, esto permite que el código existente continúe trabajando en Java 9. También permite una transición gradual al código modular.

Cualquier código no modular se coloca en un módulo sin nombre cuando se compila. Este es un módulo especial que puede usar tipos de todos los demás módulos pero solo de paquetes que tienen una declaración de exports .

Todos los paquetes en el módulo sin nombre se exportan automáticamente.

Las palabras clave, por ejemplo, el module etc., tienen un uso restringido dentro de la declaración del módulo, pero se pueden seguir utilizando como identificadores en otros lugares.

Definiendo un módulo básico.

Los módulos se definen en un archivo llamado module-info.java , denominado descriptor de módulo. Debe colocarse en la raíz del código fuente:

 |-- module-info.java
 |-- com
     |-- example
         |-- foo
             |-- Foo.java
         |-- bar
             |-- Bar.java

Aquí hay un descriptor de módulo simple:

module com.example {
    requires java.httpclient;
    exports com.example.foo;
}

El nombre del módulo debe ser único y se recomienda que use la misma notación de nombres de DNS inverso que utilizan los paquetes para garantizar esto.

El módulo java.base , que contiene las clases básicas de Java, está visible de forma implícita en cualquier módulo y no necesita ser incluido.

La declaración de requires nos permite utilizar otros módulos, en el ejemplo se importa el módulo java.httpclient .

Un módulo también puede especificar qué paquetes exports y, por lo tanto, lo hace visible para otros módulos.

El paquete com.example.foo declarado en la cláusula de exports será visible para otros módulos. Cualquier com.example.foo de com.example.foo no se exportará, necesitan sus propias declaraciones de export .

A la inversa, com.example.bar , que no figura en las cláusulas de exports , no será visible para otros módulos.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow