我有以下类(注意方法是静态的):
class Base { public static void whosYourDaddy() { Class callerClass = // what should I write here to get caller class? System.out.print(callerClass.getName()); } } Class A extends Base { public static void foo() { A.whosYourDaddy(); } } Class B extends Base { public static void bar() { B.whosYourDaddy(); } }
当我打电话时:
A.foo(); B.bar();
我想获得输出:
AB而不是BaseBase.甚至可以使用静态方法(在Java 7中)?
解决方法
你可以做什么,但不应该:)使用Throwable getStackTrace方法.除了气味,这是非常缓慢的,因为获得堆栈跟踪并不是那么快.但是你将获得一个StackTraceElement数组,每个都将包含调用它的类的类(你也可以获取文件和行,如果你将两者分开:你可以获得一个可点击的链接日食,不是说我曾做过这样的事情……).
就像是
String className = new Throwable().getStackTrace()[1].getClassName();
希望有所帮助:)