Java の静的メソッドから getClass() を呼び出すにはどうすればいいですか? 質問する

Java の静的メソッドから getClass() を呼び出すにはどうすればいいですか? 質問する

いくつかの静的メソッドが必要なクラスがあります。これらの静的メソッド内で、getClass() メソッドを呼び出して次の呼び出しを行う必要があります。

public static void startMusic() {
  URL songPath = getClass().getClassLoader().getResource("background.midi");
}

しかし、Eclipse は次のように言います:

Cannot make a static reference to the non-static method getClass() 
from the type Object

このコンパイル時エラーを修正する適切な方法は何ですか?

ベストアンサー1

答え

TheClassName.classの代わりにを使用してくださいgetClass()

ロガーの宣言

これは、ログ宣言を挿入する簡単な方法を提供するという特定のユースケースで非常に注目されているため、それについて私の考えを追加しようと思いました。ログ フレームワークでは、ログが特定のコンテキスト (完全修飾クラス名など) に制限されることが想定されることがよくあります。そのため、変更せずにコピー アンド ペーストすることはできません。他の回答では、貼り付け可能なログ宣言の提案が提供されていますが、バイトコードが膨張したり、ランタイム イントロスペクションが追加されたりするなどの欠点があります。これらはお勧めしません。コピー アンド ペーストはエディターの問題であるため、エディター ソリューションが最も適切です。

IntelliJ では、ライブ テンプレートを追加することをお勧めします。

  • 略語として「log」を使用する
  • private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger($CLASS$.class);テンプレートテキストとして使用します。
  • 変数の編集をクリックし、式を使用してCLASSを追加します。className()
  • FQ 名を再フォーマットして短縮するには、ボックスをオンにします。
  • コンテキストを Java: 宣言に変更します。

入力するとlog<tab>自動的に次のように展開されます

private static final Logger logger = LoggerFactory.getLogger(ClassName.class);

インポートを自動的に再フォーマットして最適化します。

おすすめ記事