質問

重複の可能性:
Javaの静的メソッドからクラス名を取得する

静的メソッド内にいる場合、クラス名自体を入力せずにクラス名 (名前を含む文字列) を取得する方法はありますか?

たとえば、次のように入力すると、 MyClass.class.getName() ただそれ以上に役に立たない "Myclass".

役に立ちましたか?

解決

これを行うには、新しい例外を作成し (スローするのではなく)、そのスタック トレースを検査します。あなたのクラスは例外の発生元であるため、0 番目の要素になります。ちょっと間違っているように感じますが、うまくいきます。

System.out.println( new Exception().getStackTrace()[0].getClassName() );

Thread クラスでも同じことができます。これは私にはすっきりしているように見えますが、行が少し長くなります。あなたのクラスは、スタックトレースの 0 番目の要素ではなく、最初の要素になりました。Thread.getStackTrace() は 0 番目です。

System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );

たとえば、MyClass.class.getName() と入力しても、単に「Myclass」と入力するだけでは役に立ちません。

逆に、IDE のリファクタリング関数を使用して MyClass の名前を変更すると、MyClass.class.getName() が RenamedClass.class.getName() に置き換えられます。そこに文字列を入れる場合は、手動で行う必要があります。

他のヒント

匿名の内部クラスを使用できます。

class Test {
  public static void main(String[] args) {
    String className = new Object(){}.getClass().getEnclosingClass().getName();
    System.out.println(className);
  }
}

タイピングの手間を省くだけなら、そんなことは考えないでください。MyClass.class を使用すると、すべてのリファクタリング ツールがコードを認識し、コードを適切に操作できるようになります。

Java でプログラムすることを選択すると、大量の文字を入力することになります。IDE を使用すると、入力する手間が省けます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top