Maison >Java >javaDidacticiel >Comment réparer l'exception InaccessibleObjectException de Java 9 : solutions JDK et code d'application ?

Comment réparer l'exception InaccessibleObjectException de Java 9 : solutions JDK et code d'application ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-24 11:30:12428parcourir

How to Fix Java 9's InaccessibleObjectException:  JDK and Application Code Solutions?

Comment résoudre l'exception InaccessibleObjectException sur Java 9

Lors de l'utilisation de Java 9, les développeurs peuvent rencontrer l'InaccessibleObjectException. Cela se produit en raison de la mise en œuvre d'une encapsulation forte par le système de modules de plate-forme Java.

Répartition des messages d'exception :

Unable to make {member} accessible: module {A} does not "opens {package}" to {B}

Principaux scénarios provoquant l'exception :

1. Appel réfléchissant dans JDK

  • {A} est un module JDK (par exemple, java.base)
  • {member} et {package} appartiennent à l'API JDK
  • {B} est un module bibliothèque/framework/application (souvent module sans nom @...)

2. Réflexion sur le code d'application

  • {A} est un module d'application
  • {member} et {package} appartiennent au code d'application
  • {B} est un module framework ou module sans nom @...

1. Solution pour un appel réfléchissant dans JDK :

Utilisez l'indicateur de ligne de commande suivant pour ouvrir le package spécifié pour réflexion :

java --add-opens java.base/java.lang=ALL-UNNAMED

Remplacez ALL-UNNAMED par le nom du nom nommé. module le cas échéant.

2. Solution pour la réflexion sur le code d'application :

Modifiez le module {A} pour ouvrir le package interne en utilisant l'une des options suivantes dans son descripteur de module :

  • exports {package} (le rend accessible au public)
  • exporte {package} vers {B} (le rend accessible uniquement à B)
  • ouvre {package} (le rend accessible au moment de l'exécution à tout le code)
  • ouvre {package} à {B} (le rend accessible au moment de l'exécution à seulement B)
  • ouvrir le module {A} { ... } (rend l'intégralité du module accessible à tout le code au moment de l'exécution)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn