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

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

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

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

a)不需要使用Exception,你可以这样做: Thread.currentThread().getStackTrace()

b)无论你想做什么,都不要这样做。 听起来真可怕。 我想你应该考虑通过AOP进行日志记录(这是一个看起来合理的小教程 )。

 Thread.currentThread().getStackTrace() 

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