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,976
  • 16
  • 53
  • 87

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
  • 486,780
  • 108
  • 951
  • 1,012
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
  • 47,137
  • 25
  • 94
  • 117
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
  • 114,158
  • 16
  • 130
  • 208