> Java > java지도 시간 > 스택 추적 또는 리플렉션을 사용하여 Java 메서드 호출자를 어떻게 복구할 수 있습니까?

스택 추적 또는 리플렉션을 사용하여 Java 메서드 호출자를 어떻게 복구할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-31 11:50:15
원래의
473명이 탐색했습니다.

How Can I Recover the Caller of a Java Method Using Stack Trace or Reflection?

스택 추적 또는 리플렉션을 통해 메서드 호출자 복구

메서드 호출자를 식별하는 기능은 다양한 디버깅에서 매우 중요할 수 있습니다. 또는 추적 시나리오. 다행스럽게도 Java는 이 문제를 해결하기 위해 스택 추적과 리플렉션이라는 두 가지 기본 접근 방식을 제공합니다.

Stack Trace

Thread.currentThread().getStackTrace() 메서드는 배열을 반환합니다. StackTraceElement 개체의 Java 문서에 따르면 이 배열의 마지막 요소는 가장 최근 메서드 호출인 스택의 맨 아래를 나타냅니다.

예:

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
로그인 후 복사

각 StackTraceElement는 스택에 대한 정보를 얻기 위한 여러 도우미 메서드를 제공합니다. 프레임:

  • getClassName()
  • getFileName()
  • getLineNumber()
  • getMethodName()

특정 사용 사례에 따라 실험을 통해 어떤 요소를 결정해야 할 수도 있습니다. stackTraceElements 배열은 원하는 호출자에 해당합니다. 일반적으로 인덱스 [1] 또는 [2]에 있습니다.

리플렉션

또는 리플렉션을 사용하여 발신자 정보에 액세스할 수도 있습니다. 원하는 클래스에서 getDeclaredMethod 메소드를 호출하면 관심 있는 메소드를 나타내는 Method 객체를 검색할 수 있습니다. 그런 다음 Method 객체의 getClass 메소드를 사용하여 선언 클래스에 대한 Class 객체를 얻을 수 있습니다. 마지막으로 Class 객체의 getName 메소드를 사용하면 호출 메소드의 클래스 이름을 확인할 수 있습니다.

예:

Class<?> declaringClass = method.getDeclaringClass();
String callerClassName = declaringClass.getName();
로그인 후 복사

스택 추적 중에서 선택 반영은 원하는 세분성 수준 및 기타 요인에 따라 달라집니다. 그러나 두 접근 방식 모두 Java에서 메소드 호출자를 추적하기 위한 효과적인 메커니즘을 제공합니다.

위 내용은 스택 추적 또는 리플렉션을 사용하여 Java 메서드 호출자를 어떻게 복구할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿