在不使用Exceptions的情况下获取调用类的名称

时间:2011-03-21 09:32:32

标签: java

是的,通过使用异常获取类名是一个合理的解决方案,但我正在寻找更优雅的东西。

String className = new Exception().getStackTrace()[1].getClassName();

这主要用于记录目的,并确保我的缓存关键字是特定于组件/调用者类的。

3 个答案:

答案 0 :(得分:10)

a)无需使用Exception,您可以执行此操作:Thread.currentThread().getStackTrace()

b)无论你想做什么,都不要这样做。听起来真可怕。我想你应该考虑通过AOP进行记录(这里的a small tutorial看起来合理)。

答案 1 :(得分:3)

Thread.currentThread().getStackTrace()

答案 2 :(得分:3)

在Oracle JVM上,您可以使用非标准的sun.reflect.Reflection.getCallerClass(2)。这要快得多,但应该小心使用。 (因为它不是跨平台的,可以在Java版本之间进行更改)