>Java >java지도 시간 >액세스 제한에도 불구하고 Java에서 리플렉션을 사용하여 개인 메서드를 호출하려면 어떻게 해야 합니까?

액세스 제한에도 불구하고 Java에서 리플렉션을 사용하여 개인 메서드를 호출하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-08 22:22:02505검색

How Can I Invoke Private Methods Using Reflection in Java Despite Access Restrictions?

리플렉션을 활용하여 프라이빗 메서드 호출

리플렉션을 통해 프라이빗 메서드에 액세스하는 것에 대한 Java의 제한에도 불구하고 이러한 제한을 극복할 수 있는 솔루션이 있습니다. 리플렉션을 통해 프라이빗 메서드를 호출하려면 다음 접근 방식을 활용할 수 있습니다.

먼저 getMethod(String methodName) 대신 getDeclaredMethod(String methodName)를 사용하여 프라이빗 메서드를 가져옵니다. 이 메소드를 사용하면 현재 클래스 내에 선언된 공개 메소드와 비공개 메소드 모두에 액세스할 수 있습니다.

그런 다음 비공개 메소드에 대한 기본 액세스 제한을 우회하려면 setAccessible(booleanaccessible) 메소드를 사용하여 접근성을 부여합니다. accessable을 true로 설정하면 보호 설정을 무시하고 프라이빗 메서드 호출을 허용할 수 있습니다.

마지막으로 원하는 개체 및 필수 개체와 함께 호출(Object object, Object... args)을 사용하여 프라이빗 메서드를 호출합니다. 인수.

다음은 원본에 제공된 코드의 업데이트된 버전입니다. 질문:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

주의 사항:

  • getDeclaredMethod는 상속된 메서드가 아닌 현재 클래스 내에 선언된 메서드에 대한 액세스를 제한합니다. 상속된 메소드는 구체적인 클래스 계층 구조를 순회해야 합니다.
  • SecurityManager는 잠재적으로 setAccessible의 사용을 방지할 수 있습니다. 이러한 경우 AccessController 또는 Subject를 활용하여 코드를 PrivilegedAction으로 실행하는 것을 고려해보세요.

위 내용은 액세스 제한에도 불구하고 Java에서 리플렉션을 사용하여 개인 메서드를 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.