Using reflection:
/** using reflection
trace. */
Method method = new Object(){}.getClass().getEnclosingMethod();
String methodName =
method.getName();
However, a new anonymous inner class will be created during
compile time (e.g. MethodNameTest$1.class). So this will create a .class file
for each method that deploys this trick.
Advantage of trick is that getEncosingMethod()
It returns java.lang.reflect.Method which can be used to
retrieve all other information of the method including annotations and
parameter names. This makes it possible to distinguish between specific methods
with the same name (method overload).
Using stackTrace:
/** using stack trace.
*/
StackTraceElement[]stackTrace=Thread.currentThread().getStackTrace()
String nameUsingTrace
= stackTrace[1].getMethodName();
import java.lang.reflect.Method;
public class MethodNameTest {
public static void main(String[]
args) {
checkMethodName();
}
private static void checkMethodName()
{
/** using stack trace. */
StackTraceElement[] stackTrace
=
Thread.currentThread().getStackTrace();
String nameUsingTrace = stackTrace[1].getMethodName();
System.out.println("print method name using stack trace : "
+ nameUsingTrace);
/** using reflection trace. */
Method method =
new Object(){}.getClass().getEnclosingMethod();
String methodName = method.getName();
System.out.println("print method name using reflection : "
+ methodName);
}
}
Output:
print method name
using stack trace : checkMethodName
print method name
using reflection : checkMethodName
No comments:
Post a Comment