Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9의 StackWalker.getCallerClass() 메서드: 호출자 클래스를 확인하는 방법

Java 9는 StackWalker API를 통해 지연(lazy) 접근 방식의 효율적인 스택 탐색 기능을 제공하며, 스택 트레이스를 손쉽게 필터링할 수 있습니다. StackWalker 객체를 사용하면 호출 스택을 순회하고 각 스택 프레임에 접근할 수 있습니다. 이 클래스에는 walk(), forEach(), getCallerClass() 등 유용한 메서드들이 포함되어 있습니다.

getCallerClass() 메서드는 현재 실행 중인 메서드를 호출한 클래스, 즉 호출자(caller) 클래스를 반환합니다. 호출자 클래스 정보를 얻으려면 StackWalker 인스턴스를 생성할 때 반드시 RETAIN_CLASS_REFERENCE 옵션을 지정해야 합니다. 이 옵션은 StackWalker가 탐색하는 모든 스택 프레임의 Class 객체 참조를 유지하는 역할을 합니다.

문법

public Class<?> getCallerClass()

예제 코드

import java.lang.StackWalker.Option;

public class StackWalkerTest {
    public static void main(String args[]) {
        StackWalkerTest1.test1();
    }
}

class StackWalkerTest1 {
    protected static void test1() {
        StackWalkerTest2.test2();
    }
}

class StackWalkerTest2 {
    protected static void test2() {
        System.out.println(StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE).getCallerClass());
    }
}

위 예제에서는 main() 메서드가 StackWalkerTest1test1()을 호출하고, test1()은 다시 StackWalkerTest2test2()를 호출합니다. 따라서 test2() 내부에서 getCallerClass()를 실행하면 자신을 직접 호출한 클래스인 StackWalkerTest1이 반환됩니다.

실행 결과

class StackWalkerTest1