这个问题是由于Java 9引入的模块化系统所导致的。在Java 9之前,所有的类都是在同一个命名空间中,可以互相访问。但是在Java 9中,所有的类都被分成了模块,每个模块都有自己的命名空间。在模块之间进行访问需要进行显式的导出和导入。

解决这个问题的方法是打开java.lang.invoke模块,使其对未命名模块(即应用程序)开放。可以在module-info.java文件中添加以下语句:

opens java.lang.invoke to unnamed module;

如果你正在使用maven,则可以在pom.xml文件中添加以下内容:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
                <compilerArgs>
                    <arg>--add-exports</arg>
                    <arg>java.base/jdk.internal</arg>
                    <arg>to</arg>
                    <arg>ALL-UNNAMED</arg>
                    <arg>--add-opens</arg>
                    <arg>java.base/java.lang.invoke=ALL-UNNAMED</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

这将在编译时自动添加所需的导出和导入语句。

Java 9 模块化:解决'Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible' 错误

原文地址: https://www.cveoy.top/t/topic/oLet 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录