Tackling InaccessibleObjectException dans Java 9 : "Impossible de rendre {member} accessible : le module {A} n'ouvre pas {package}" à {B}"
Dans Java 9, l'introduction du système de modules de plate-forme a entraîné une encapsulation plus stricte. Ce monde encapsulé nous lance parfois la redoutable InaccessibleObjectException, en particulier dans le contexte de bibliothèques comme Spring, Hibernate et JAXB.
Le coupable derrière l'exception : L'exception implique qu'un membre spécifique ( méthode/champ/classe) dont l'accès est restreint en raison des limitations du système de module. Ces limitations nécessitent généralement que le membre soit public ou que son package soit exporté. La réflexion ajoute une autre couche de défi, car elle tente de contourner ces contrôles d'accès.
Résoudre l'exception : Pour éviter l'exception, le système de modules doit être convaincu d'autoriser l'accès à l'élément restreint. . Voici comment vous pouvez aborder cela dans différents scénarios :
Scénario 1 : Appel réfléchi dans le JDK
L'exception se produit lorsqu'une bibliothèque/un framework invoque un module JDK via la réflexion. Ici, les modules JDK ne peuvent pas être modifiés, donc les indicateurs de ligne de commande entrent en jeu.
Solution :
Exemple :
Scénario 2 : Réflexion sur le code d'application
Dans ce cas, la réflexion est utilisé dans un module pour accéder à un autre module. En tant que développeur, vous avez plus de contrôle sur le module auquel vous accédez ici.
Solution :
Modifier le descripteur de module du module accédé ( {A}) pour :
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!