2011-01-09 4 views
25

런타임에 메서드 이름이 실행된다는 것을 알 수있는 방법이 있는지 궁금합니다.Java에서 해당 메소드 내에서 메소드 이름을 찾는 방법은 무엇입니까?

예를 들어, private void doSomething (String s) 메서드 내에서 doSomething (String s) 메서드를 실행하고 있다는 것을 알고 싶습니다.

+1

이것은 실제로 코드에 필요한 것이 아닙니다. 나는 당신이 그것을 필요로하지 않도록 당신의 디자인을 재고 할 것을 매우 권할 것이다. –

+1

당신이 그 방법 안에 있다면 당신은 이미 그 이름을 알고 있습니다, 그렇습니까? :) 호출자 메서드의 이름을 알고 싶다면 아래의 Jigar의 대답이 찾고있는 것입니다. 색인으로 0 대신 1을 사용하십시오. –

답변

60

는 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 
    } 
    } 
+0

여기에 반갑습니다 :) –

+1

스택을 확보하기 위해 예외를 만들 필요가 없으므로 더 나은 솔루션입니다. – rfeak

+2

이것이 나를 위해 작동하지 않는 이유를 모르겠다 ... 나를 위해 "getStackTrace"를 출력한다 - Java 1.5를 사용하여 –

10
System.out.println(new Exception().getStackTrace()[0].getMethodName()); 

또한
당신이 Thread.currentThread().getStackTrace() 그것을 얻을 수

+0

useGetStacktrace() [1] 호출 메서드 이름을 가져옵니다. 조금 더 유용 :) – Daniel

+0

매우 근사하다; 감사합니다. – JAM

+0

@ 대니얼은 무엇을 요구 했습니까? 1) stacktrace가 정확하다는 _guarantee_가없고, 2) 이전에는 매우 비싼 작업이었습니다. 최근의 JVM에서 더 좋을 것입니다. –

-2
Method lastMethodCalled = this.getClass().getEnclosingMethod(); 
+1

이것은 그가 요구 한 것을하지 않습니다. [이 링크] (http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getEnclosingMethod())를 참조하십시오. – job

관련 문제