首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以通过Java 9中的反射来访问包的作用域方法?

是否可以通过Java 9中的反射来访问包的作用域方法?
EN

Stack Overflow用户
提问于 2016-04-09 05:49:42
回答 1查看 564关注 0票数 4

我有以下代码来检索http和https的默认URLStreamHandlers,这是通过访问静态包作用域方法URL.getURLStreamHandler()在Java8中工作的。

代码语言:javascript
复制
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;
    }
}

在使用拼图的Java9中,这仍然是可能的吗?还是会以这种方式修改可见性呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 13:15:36

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

在您的示例中,对method.setAccessible(true)的调用将失败,其中包含一条与此类似的消息:

java.lang.reflect.InaccessibleObjectException:无法使getURLStreamHandler可访问:模块java.不是“打开java.”未命名模块@1941a8ff

有关如何解决这一问题,请参见这个问题

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36513247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档