Access package accessible constructor outside package

440 Views Asked by At

I knot that it sound a bit controversial, but I must access a constructor that is protected with the package accessor... however I'm outside that package, and so I was using reflection to access that constructor like so:

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

However when I run this, I get:

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

Are there ways to avoid this, or either other ways to access that constructor?

1

There are 1 best solutions below

0
On BEST ANSWER

You need setAccessible.

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

Reflection is almost always being a bad idea. setAccessible is worse. Modules may add further complications.