2011-01-09 10 views
25

実行時に実行されているメソッド名を知る方法があるのでしょうか?Javaでそのメソッド内からメソッド名を見つける方法は?

たとえば、private void doSomething (String s)メソッドの内部では、私はdoSomething (String s)メソッドを実行していることを知りたいと思います。

+1

これは本当にコードに必要なものではありません。私は非常に多くのあなたがそれを必要としないようにあなたのデザインを考え直すことをお勧めしたいと思います。 –

+1

あなたがその方法の中にいるなら、あなたはすでにその名前を知っていますよね? :)あなたが呼び出し元メソッドの名前を知りたい場合は、以下のJigarの答えがあなたが探しているものです。インデックスとして0の代わりに1を使用してください。 –

答えて

60

を参照してください。また、あなたがスタックトレースを取得するために、例外を必要としない、
あなたはThread.currentThread().getStackTrace()でそれを得ることができます。

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

なぜこれが私のために働いているのか分かりません... Java 1.5を使って "getStackTrace"を表示します。 –

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

JDK1.5以降

+0

useGetStacktrace()[1]呼び出しメソッド名を取得します。少し便利です:) – Daniel

+0

非常にクール; – JAM

+0

@ダニエル、ありがとうございました。 1)stacktraceが正確であることを保証していないこと、2)以前は非常に高価な操作であったことに注意してください。最近のJVMの方が良いはずです。 –

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

これは彼が求めていたことをしません。 [このリンク](http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getEnclosingMethod())を参照してください。 – job

関連する問題