Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

281
Vistas
En Java 9, ¿por qué las colisiones de paquetes se tratan de manera un poco diferente en algunos casos?

Estoy experimentando con Java 9 y viendo los siguientes escenarios:

Experimento 1

  • módulo A
  • módulo B
  • ambos declaran un paquete no vacío llamado com.foo, pero no lo exportan .
  • ambos son requeridos por un 3er módulo C

Ejecutar un main desde 'C' da un error de tiempo de ejecución:

java.lang.RuntimeException: paquete com.foo tanto en el módulo B como en el módulo A

Experimento 2

Igual que antes, pero esta vez ambos exportan com.foo.

Resultado de ejecutar main desde C:

java.lang.module.ResolutionException: los módulos B y A exportan el paquete com.foo al módulo C

Experimento 3

Igual que 2, pero esta vez declaré el paquete com.foo en el módulo C.

Ahora recibo un error de compilación: Error:(4, 1) java: el módulo C lee el paquete com.foo de A y B

¿Por qué los dos primeros casos no se detectan también durante la compilación? ¿Existen propiedades de tiempo de ejecución que desconozco que impidan la resolución antes de ejecutar el programa?

Además, en lo que respecta a los mensajes de error: de qué manera el mensaje de error del experimento 2 es mejor que el del experimento 1. No es que si uno de los módulos no lo exporta, el resultado final será diferente. . En otras palabras, ¿cuál fue la consideración detrás de producir diferentes mensajes de error?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los experimentos n.º 2 y n.º 3 son problemas de paquetes divididos y deberían ser errores tanto en tiempo de compilación como en tiempo de ejecución. Para el n. ° 2, no puedo decir en su publicación por qué no ve un error de compilación al compilar C. Debería ver un error con texto como "el módulo C lee el paquete com.foo de A y B".

El experimento n.º 1 es probablemente A, B y C en la ruta del módulo de la aplicación, donde no pueden estar todos en el mismo espacio de nombres (mismo cargador de clases) debido a la superposición de paquetes. El mensaje de error que ve se ha mejorado un poco en versiones recientes.

Tenga en cuenta que los experimentos aquí se han discutido en muchos hilos sobre jigsaw-dev y ese podría ser un mejor lugar para plantear preguntas y experiencias, al menos mientras JDK 9 aún está en desarrollo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda