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

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

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 11:30:12430browse

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

How to Resolve InaccessibleObjectException on Java 9

When using Java 9, developers may encounter the InaccessibleObjectException. It arises due to the Java Platform Module System's implementation of strong encapsulation.

Exception Message Breakdown:

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

Main Scenarios Causing the Exception:

1. Reflective Call Into JDK

  • {A} is a JDK module (e.g., java.base)
  • {member} and {package} belong to the JDK API
  • {B} is a library/framework/application module (often unnamed module @...)

2. Reflection Over Application Code

  • {A} is an application module
  • {member} and {package} belong to the application code
  • {B} is a framework module or unnamed module @...

1. Solution for Reflective Call Into JDK:

Use the following command-line flag to open the specified package for reflection:

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

Replace ALL-UNNAMED with the name of the named module if applicable.

2. Solution for Reflection Over Application Code:

Edit module {A} to open the internal package using one of the following options within its module descriptor:

  • exports {package} (makes it publicly accessible)
  • exports {package} to {B} (makes it accessible only to B)
  • opens {package} (makes it accessible at runtime to all code)
  • opens {package} to {B} (makes it accessible at runtime to only B)
  • open module {A} { ... } (makes the entire module accessible to all code at runtime)

The above is the detailed content of How to Fix Java 9's InaccessibleObjectException: JDK and Application Code Solutions?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn