11

I'm looking for a way to get the name of the current method without having to create a blank object. Is there a way to do this? This would tidy up our logging code.

Here is what we do now:

new Object() {}.getClass().getEnclosingMethod().getName(
davidahines
  • 3,816
  • 15
  • 50
  • 86

3 Answers3

18

How about Thread.currentThread().getStackTrace()[1]?

Since this enables you to examine higher levels of the stack trace, you could easily wrap this in a helper method (see below). It also gives you the option to get quite a bit more info than just the method name, such as the file name, line number etc.

edit The helper method could look something like this (thanks @Esailija):

public static String getMethodName() {
    return Thread.currentThread().getStackTrace()[2].getMethodName();
} 
NPE
  • 464,258
  • 100
  • 912
  • 987
6

You can also use

Thread.currentThread().getStackTrace()[1].getMethodName() 

contains the last method call, but is not shorter that

new Object() {}.getClass().getEnclosingMethod().getName

I am not aware of a sorter way to do it.

dreamcrash
  • 40,831
  • 24
  • 74
  • 100
3

You can use thread.currentThread().getStacktrace()[0].getMethodName(). But this even takes more time than new Throwable().getStacktrace() (see http://alexradzin.blogspot.co.il/2011/12/how-slow-getstacktrace-is.html)

AlexR
  • 111,884
  • 15
  • 126
  • 200