Java:函数可以返回调用类和方法名称的任何简单方法吗?

Div*_*ero 1 java reflection

通常我会从Java中向我的日志文件发送调试信息,它有助于提供关于代码中生成日志消息的位置的正确信息,以便我可以快速参考它.我不想在日志消息中对其位置进行硬编码,因为如果我重命名其方法或者将代码重构为不同的结构,我必须记住更新日志消息.我希望有一个静态函数,只返回调用函数的类和方法名称.例如,如果我有一个名为Machine的类和一个名为doS​​tuff的方法,我希望该方法中的日志消息生成代码看起来像这样:

String log_msg = Blah.getClassAndMethodName()+" did the wrong thing!";
Run Code Online (Sandbox Code Playgroud)

类Blah中的静态方法getClassAndMethodName()将返回"Machine.doStuff".这样,当我查看日志文件时,我可以轻松地告诉代码在哪里生成消息.我意识到这有点棘手,因为我需要Blah中的这个方法在一个单独的类Machine中返回有关其调用函数的信息,但是这样可以很容易地在任何地方使用这个静态调用.

我不知道这是否可行,但我很感激任何答案!另外,假设有可能,这是一种特别高的开销类型的操作吗?(我假设需要反思,而不是我的强项)

谢谢!

Bri*_*new 8

如果调用Thread.getStackTrace(),则可以从那里确定调用堆栈.

返回表示此线程的堆栈转储的堆栈跟踪元素数组.如果此线程尚未启动或已终止,则此方法将返回零长度数组.如果返回的数组长度非零,则数组的第一个元素表示堆栈的顶部,这是序列中最近的方法调用.数组的最后一个元素表示堆栈的底部,这是序列中最近的方法调用.

回覆.性能.我不能建议你测量它.如果可以启用/禁用您的调试输出,我将确保您在启用调试输出时仅执行上述操作,因此您只需在需要时获取性能.