누가 이 메서드를 호출 했는지 찾고 싶을 때
@CallerSensitive
public static void callerTestJDK7() {
Class clazz= Reflection.getCallerClass();
System.out.println("class: "+clazz);
}
java 1.7까지는 이렇게 썼으나
java 1.8부터는 안된다.
@CallerSensitive 붙이라는 에러만 뱉는다.
deprecated됐다는 말도 없다.
해당 native에 대한 권한이 삭제 된 것 같다.
java 1.8부터는 이렇게 하면 된다.
public static void callerTestJDK8() {
new SecurityManager() {
{
Class<?>[] classes = getClassContext();
for(Class<?> clazz : classes) {
String name = clazz.getName();
System.out.println("name: "+name);
}
}
};
}
보안쪽이 다 SecurityManager로 옮겨 갔나 보다.
그런데 어렵다. SecurityManager 객체를 생성하고 getClassContext를 부르면 될 것 같은데 protected다.
클래스 재정의해서 내부 블럭을 이용하면 같은 패키지처럼 이용할 수 있다.
그런데 이런 식으로 부르는게 맞는 지 모르겠다.