访问包外访问构造函数
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
更糟。模块可能会增加更多的复杂性。
我觉得这听起来有点争议,但我必须访问一个受 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
更糟。模块可能会增加更多的复杂性。