我有以下类(注意方法是静态的):
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 数组,每个数组都包含调用它的类的类(你也可以获取文件和行,如果你用 : 分隔两者:你可以在 eclipse 中获得一个可点击的链接,而不是我曾经做过这样的事情......
类似的东西
String className = new Throwable().getStackTrace()[1].getClassName();
希望对:)有所帮助
私有 静态 类 反射 { 私有 静态 最终 安全管理器 实例 = 新的 安全管理器(); static Class getCallClass() { 返回 INSTANCE.getCallClass(2); } 私有 反射() { } 私有 静态 类 SecurityManager 扩展 java.lang.SecurityManager { public Class getCallClass(int i) { Class[] classContext = getClassContext (); if (i>= 0 && i + 1 < classContext.length) { 返回 类上下文[i + 1]; } 返回 空值; } };}
静态方法(在Java 7中)甚至可能吗?
否,静态方法不是继承的。仅继承非静态方法。
在您的情况下,更改Base
(和子类),如下所示:
class Base
{
public void whosYourDaddy()
{
Class<?> callerClass = getClass();
System.out.print(callerClass.getName());
}
}