我将我的项目迁移到 JDK 17。除了一件事之外,一切都很好:
class org.aldan3.util.TemplateEngine cannot access class sun.nio.fs.UnixPath (in module java.base) because module java.base does not export sun.nio.fs to unnamed module @c12d4d
据我了解,实现接口路径的下划线类,由于范围有限,不能称为。如何使用 Path 接口声明反射调用?或者还有什么技巧?
例外:
java.lang.IllegalAccessException:类 org.aldan3.util.TemplateEngine 无法访问类 sun.nio.fs.UnixPath(在模块 java.base 中),因为模块 java.base 不会将 sun.nio.fs 导出到未命名的模块 @c12d4d java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) 的 java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) 的 java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392)。 reflect.Method.invoke(Method.java:560) at org.aldan3.util.TemplateEngine.processMethodCall(TemplateEngine.java:1731) at org.aldan3.util.TemplateEngine.process(TemplateEngine.java:1397) at org.aldan3 .util.TemplateEngine.process(TemplateEngine.java:852) 在 org.aldan3.util.TemplateEngine.processResource(TemplateEngine.java:259) 在 org.aldan3.util.TemplateEngine.process(TemplateEngine.java:392) 在 org. aldan3.util.TemplateEngine。processResource(TemplateEngine.java:259) at org.aldan3.util.TemplateEngine.process(TemplateEngine.java:432) at org.aldan3.util.TemplateEngine.processResource(TemplateEngine.java:259) at org.aldan3.util.TemplateEngine .process(TemplateEngine.java:280) 在 org.aldan3.servlet.BasePageService.processView(BasePageService.java:381) 在 org.aldan3.servlet.BasePageService.serve(BasePageService.java:222) 在 org.aldan3.servlet。 FrontController.doRequest(FrontController.java:244) at org.aldan3.servlet.FrontController.service(FrontController.java:159) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at rogatkin.web.WebAppServlet $SimpleFilterChain.doFilter(WebAppServlet.java:3599) 在 rogatkin.web.WebAppServlet$WebAppContextFilter.doFilter(WebAppServlet.java:3219) 在 rogatkin.web.WebAppServlet$SimpleFilterChain.doFilter(WebAppServlet.java:3571) 在 rogatkin.web.WebAppServlet.service(WebAppServlet.java:1464) 在 Acme.Serve.Serve$ServeConnection.runServlet(Serve.java:2407) 在 Acme.Serve.Serve$ServeConnection.parseRequest(Serve.java:2326 ) 在 Acme.Serve.Serve$ServeConnection.run(Serve.java:2110) 在 Acme.Utils$ThreadPool$PooledThread.run(Utils.java:1238) 在 java.base/java.lang.Thread.run(Thread.爪哇:833)
由于这里有很多对问题的误解,我创建了一个最小的测试示例,如 Unmitigated 指出的
这个问题看起来很有趣,所以我来自 Meta 的朋友问我是否可以展示任何用例。我当然可以。 一个用例