Maison > Java > javaDidacticiel > Comment puis-je résoudre l'exception InaccessibleObjectException de Java 9 ?

Comment puis-je résoudre l'exception InaccessibleObjectException de Java 9 ?

Barbara Streisand
Libérer: 2024-12-27 02:49:14
original
559 Les gens l'ont consulté

How Can I Resolve Java 9's InaccessibleObjectException?

Résolution de l'exception InaccessibleObjectException dans Java 9

L'InaccessibleObjectException apparaît dans divers scénarios avec Java 9, impliquant souvent des bibliothèques ou des frameworks tiers qui utilisent réflexion pour interagir avec le Java Development Kit (JDK) ou le code de l'application. Voici une explication du problème et comment le contourner.

Cause et implications

Java 9 a introduit le système de modules, imposant des contraintes d'encapsulation plus fortes. L'accès aux éléments (par exemple, classes, méthodes) est restreint sauf si des critères spécifiques sont remplis. Ces restrictions s'étendent aux opérations de réflexion, comme setAccessible(), qui tente de contourner les limitations d'accès.

Répartition des messages d'exception

Le message d'exception fournit des informations cruciales :

Unable to make {member} accessible: module {A} does not "opens {package}" to {B}
Copier après la connexion
  • {A} : Le module inaccessible (par exemple, java.base)
  • {membre} : L'élément inaccessible spécifié (par exemple, la méthode definitionClass)
  • {package} : l'inaccessibilité s'applique aux éléments de ce package (par exemple, java.lang)
  • {B} : le module demandeur (généralement un module sans nom comme @1941a8ff)

Résolution Stratégies

Selon le scénario, différentes stratégies peuvent résoudre le problème. Il existe deux cas principaux :

Cas 1 : appel de réflexion dans le JDK

  • En raison de l'immuabilité du JDK, le correctif implique des indicateurs de ligne de commande JVM.
  • Utilisez --add-opens avec la syntaxe {A}/{package}={B} pour ouvrir des packages spécifiques pour réflexion.

Cas 2 : Réflexion sur le code d'application

  • Le module inaccessible peut être modifié pour ouvrir ses composants internes.
  • Appliquez les directives d'exportation ou d'ouverture dans le descripteur de module pour configurer les limitations d'accessibilité.
  • Les options incluent l'exportation ou l'ouverture de packages spécifiques vers le demandant le module ou tout le code.

Considérations supplémentaires

  • Dans certains scénarios, il peut être nécessaire d'appliquer plusieurs indicateurs --add-opens.
  • En dernier recours, l'indicateur --permit-illegal-access (disponible uniquement dans Java 9) peut être utilisé pour activer accès réfléchi à travers les modules. Cependant, cela doit être traité comme une solution temporaire en raison des implications en matière de sécurité.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal