Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

271
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!