0

我认为这听起来有点争议,但我必须访问一个受访问器保护的构造函数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 ""

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

4

1 回答 1

1

你需要setAccessible.

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

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

于 2021-05-22T17:58:14.180 回答