Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

272
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda