【问题标题】:Access package accessible constructor outside package包外访问包可访问构造函数
【发布时间】:2021-05-14 21:55:39
【问题描述】:

我认为这听起来有点争议,但我必须访问一个受 package 访问器保护的构造函数......但是我在那个包之外,所以我使用反射来访问那个构造函数,就像这样:

Constructor<TargetClass> constructor = TargetClass.class.getDeclaredConstructor(SomeClass.class);
var manager = constructor.newInstance(new SomeClass());

但是当我运行它时,我得到:

java.lang.IllegalAccessException: class com.mypackage.Application cannot access a member of class com.someotherpackage.TargetClass with modifiers ""

有没有办法避免这种情况,或者有其他方法可以访问该构造函数?

【问题讨论】:

  • @user15793316 有时,出于某种原因,我忘记了文档的存在,像你这样的人应该把石头扔到我的头上啊哈哈非常感谢你,请考虑回答,以便我可以将其标记为正确,并给你一个大拇指

标签: java reflection constructor illegalaccessexception


【解决方案1】:

你需要setAccessible

Constructor<TargetClass> constructor =
    TargetClass.class.getDeclaredConstructor(SomeClass.class);
constructor.setAccessible(true);
var manager = constructor.newInstance(new SomeClass());

反思几乎总是一个坏主意。 setAccessible 更糟。模块可能会增加更多的复杂性。

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2015-10-06
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2021-04-17
    • 2021-09-04
    相关资源
    最近更新 更多