gpt4 book ai didi

java - 是否可以使用 Jigsaw 在 Java 9 中通过反射访问包范围的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:17 24 4
gpt4 key购买 nike

我有以下代码通过访问静态包作用域方法 URL.getURLStreamHandler() 检索在 Java 8 中工作的 http 和 https 默认 URLStreamHandlers:

private URLStreamHandler getURLStreamHandler(String protocol) {
try {
Method method = URL.class.getDeclaredMethod("getURLStreamHandler", String.class);
method.setAccessible(true);
return (URLStreamHandler) method.invoke(null, protocol);
} catch (Exception e) {
logger.warning("could not access URL.getUrlStreamHandler");
return null;
}
}

这在 Java 9 中仍然可行吗 jigsaw还是会禁止以这种方式修改可见性?

最佳答案

它曾经在早期的原型(prototype)中是可能的,但现在已经不可能了。 Jigsaw 的可访问性规则现在仅限制对 public 元素(类型、方法、字段)的访问。

在您的示例中,对 method.setAccessible(true) 的调用将失败,并显示类似于此的消息:

java.lang.reflect.InaccessibleObjectException: Unable to make getURLStreamHandler accessible: module java.... does not "opens java...." to unnamed module @1941a8ff

参见 this question了解如何解决这个问题。

关于java - 是否可以使用 Jigsaw 在 Java 9 中通过反射访问包范围的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36513247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com