В Java ты можешь получить доступ к приватным методам извне класса через Reflection, который дает возможность во время выполнения программы обращаться к членам класса независимо от модификаторов доступа.
Процесс состоит из трёх этапов:
Class с помощью Class.forName()getDeclaredMethod()true и вызвать методМетод setAccessible(true) критически важен — он обходит обычные проверки контроля доступа и позволяет тебе вызвать приватный метод из внешнего кода.
// Foo.java
public class Foo {
private void message() {
System.out.println("hello java");
}
}
// FooMethodCall.java
import java.lang.reflect.Method;
public class FooMethodCall {
public static void main(String[] args) throws Exception {
Class c = Class.forName("Foo");
Object o = c.newInstance();
Method m = c.getDeclaredMethod("message", null);
m.setAccessible(true);
m.invoke(o, null);
}
}
Хотя технически это возможно, доступ к приватным методам извне класса нарушает принципы объектно-ориентированного программирования. Подумай о рефакторинге своего дизайна — лучше использовать публичные методы или интерфейсы.
Метод setAccessible(true) постоянно изменяет модификатор доступа приватного метода, преобразуя его в публичный для всех последующих вызовов.
Новый — ещё не проверен сообществом
Вы