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

标签 java reflection

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

String log_msg = Blah.getClassAndMethodName()+" did the wrong thing!";

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

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

谢谢!

最佳答案

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

Returns an array of stack trace elements representing the stack dump of this thread. This method will return a zero-length array if this thread has not started or has terminated. If the returned array is of non-zero length then the first element of the array represents the top of the stack, which is the most recent method invocation in the sequence. The last element of the array represents the bottom of the stack, which is the least recent method invocation in the sequence.

回复。表现。除了建议您测量它之外,我无法提供其他建议。如果您的调试输出可以启用/禁用,我会确保您仅在调试输出启用时执行上述操作,启用,这样您仅在需要时才会受到性能影响。

关于Java:函数可以返回调用类和方法名称的任何简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1151064/

相关文章:

java - 当我的应用程序在我的手机上崩溃时,我没有强制关闭并且必须重新启动手机

java - 通知对象发生了某些事情 - 监听器对象?

java - Android OpenGLES 致命异常 : GLThread 10

java - MyBatis 映射器通过反射插入注释

scala - 在 Scala 中获取所有 enum-y case 对象值

java - 如何限制单行打印的字符串数量

java - Hadoop jar:未知程序

vb.net - 使用反射捕获错误详细信息

c# - 为什么我的 .NET 属性不执行操作?

c++ - C++ 或 C 中函数的名称