访问包外访问构造函数

Access package accessible constructor outside package

我觉得这听起来有点争议,但我必须访问一个受 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 ""

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

你需要setAccessible.

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

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