Я не понимаю, в чем ваша проблема. Статический метод getInstance()
в классе PrivateMethodClass
является общедоступным, поэтому нет проблем с его вызовом. Это означает, что не имеет значения, является ли конструктор приватным или нет.
Если, с другой стороны, вы спрашиваете, как создать экземпляр класса PrivateMethodClass
без с использованием метода getInstance()
, это также не является проблемой. Так же, как вы используете getDeclaredMethod()
для вызова ( private ) метода m1()
, вы можете вызвать метод getDeclaredConstructor () , чтобы получить ссылку на private конструктор,Пример кода следующий:
Class<?> c = PrivateMethodClass.class;
try {
Constructor<?> ctor = c.getDeclaredConstructor();
ctor.setAccessible(true);
Object obj = ctor.newInstance();
System.out.println(obj);
if (obj instanceof PrivateMethodClass) {
PrivateMethodClass p = (PrivateMethodClass) obj;
Method m = c.getDeclaredMethod("m1");
m.setAccessible(true);
m.invoke(p);
}
}
catch (Exception x) {
x.printStackTrace();
}
Я что-то упустил?