7

次のクラスがあります(メソッドは静的であることに注意してください):

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();

output: ABの代わりにBaseBase. 静的メソッド(Java 7)でも可能ですか?

4

3 に答える 3

6

あなたができることはありますが、すべきではありません:) Throwable getStackTrace メソッドを使用することです。においはさておき、これはかなり遅いです。スタック トレースを取得するのはそれほど速くないからです。ただし、StackTraceElement の配列を取得し、それぞれにそれを呼び出しているクラスのクラスが含まれます (また、ファイルと行を取得することもできます。2 つを : で区切ると、クリック可能なリンクを取得できます)日食、私がそのようなことをしたことはありません...)。

何かのようなもの

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

それが役立つことを願っています:)

于 2013-09-05T23:49:12.287 に答える
-1

静的メソッド(Java 7)でも可能ですか?

いいえ、静的メソッドは継承されません。非静的メソッドのみが継承されます。

あなたの場合、次のように変更Base(およびサブクラス)します。

class Base
{
  public void whosYourDaddy()
  {
    Class<?> callerClass = getClass();
    System.out.print(callerClass.getName());
  }
}
于 2013-09-05T23:43:57.420 に答える