如何实现可获取调用方方法名的静态工具类?
获取调用工具类方法的当前方法名称的实现方案
在Java中,可通过线程栈轨迹(StackTrace)实现该需求,从调用链中提取目标方法名称,具体实现如下:
工具类完整代码
import lombok.NoArgsConstructor; @NoArgsConstructor(access = lombok.AccessLevel.PRIVATE) public class NameUtils { public static String getMethodName() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); // 栈轨迹索引对应关系: // 0: Thread.getStackTrace() // 1: NameUtils.getMethodName() // 2: 调用当前工具方法的目标方法 if (stackTrace.length >= 3) { return stackTrace[2].getMethodName(); } // 处理栈深度不足的边界情况 return null; } }
测试示例
public class MyClass { public void methodName() { String name = NameUtils.getMethodName(); // 返回字符串"methodName" System.out.println(name); } public static void main(String[] args) { new MyClass().methodName(); // 控制台输出"methodName" } }
注意事项
- 该实现依赖JVM的栈轨迹机制,主流JVM(如HotSpot)均兼容,但不同JVM可能存在细微差异。
- 栈轨迹的获取存在一定性能开销,高频调用场景下需谨慎使用。
- 若需区分重载方法,可调用
stackTrace[2].toString()获取包含参数信息的完整方法签名。
内容的提问来源于stack exchange,提问作者pawello12
相关产品推荐
相关产品推荐

