런타임에 메서드 이름이 실행된다는 것을 알 수있는 방법이 있는지 궁금합니다.Java에서 해당 메소드 내에서 메소드 이름을 찾는 방법은 무엇입니까?
예를 들어, private void doSomething (String s)
메서드 내에서 doSomething (String s)
메서드를 실행하고 있다는 것을 알고 싶습니다.
런타임에 메서드 이름이 실행된다는 것을 알 수있는 방법이 있는지 궁금합니다.Java에서 해당 메소드 내에서 메소드 이름을 찾는 방법은 무엇입니까?
예를 들어, private void doSomething (String s)
메서드 내에서 doSomething (String s)
메서드를 실행하고 있다는 것을 알고 싶습니다.
는 JDK1.5 때문에, 당신은 스택 트레이스를 얻기 위해 예외가 필요하지 않습니다를 참조하십시오 :
public class Test2 {
public static void main(String args[]) {
new Test2().doit();
}
public void doit() {
System.out.println(
Thread.currentThread().getStackTrace()[1].getMethodName()); // output : doit
}
}
여기에 반갑습니다 :) –
스택을 확보하기 위해 예외를 만들 필요가 없으므로 더 나은 솔루션입니다. – rfeak
이것이 나를 위해 작동하지 않는 이유를 모르겠다 ... 나를 위해 "getStackTrace"를 출력한다 - Java 1.5를 사용하여 –
System.out.println(new Exception().getStackTrace()[0].getMethodName());
또한
당신이 Thread.currentThread().getStackTrace()
그것을 얻을 수
Method lastMethodCalled = this.getClass().getEnclosingMethod();
이것은 그가 요구 한 것을하지 않습니다. [이 링크] (http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getEnclosingMethod())를 참조하십시오. – job
이것은 실제로 코드에 필요한 것이 아닙니다. 나는 당신이 그것을 필요로하지 않도록 당신의 디자인을 재고 할 것을 매우 권할 것이다. –
당신이 그 방법 안에 있다면 당신은 이미 그 이름을 알고 있습니다, 그렇습니까? :) 호출자 메서드의 이름을 알고 싶다면 아래의 Jigar의 대답이 찾고있는 것입니다. 색인으로 0 대신 1을 사용하십시오. –