从继承的静态方法获取调用方类名



我有以下类(注意方法是静态的):

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 <&nbsp;classContext.length) {                返回 类上下文[i + 1];            }        返回 空值;        }    };}

静态方法(在Java 7中)甚至可能吗?

否,静态方法不是继承的。仅继承非静态方法。

在您的情况下,更改Base(和子类),如下所示:

class Base
{
  public void whosYourDaddy()
  {
    Class<?> callerClass = getClass();
    System.out.print(callerClass.getName());
  }
}

最新更新