静的メソッドからクラス名を取得することはできますか?[重複]
-
21-08-2019 - |
質問
重複の可能性:
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 を使用すると、入力する手間が省けます:)