1. ホーム

[解決済み] Javaで静的メソッドからgetClass()を呼び出す方法は?

2022-03-24 06:51:11

質問

私はいくつかの静的メソッドを持つ必要があるクラスを持っています。これらの静的メソッドの内部で、私は次の呼び出しを行うためにメソッド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

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

どのように解決するのですか?

回答

を使うだけです。 TheClassName.class の代わりに getClass() .

ロガーの宣言

ログ宣言を挿入する簡単な方法を提供するという特定の用途のために、これは非常に注目されているので、私はそれについて私の考えを追加しようと思いました。 ログフレームワークはしばしば、ログが特定のコンテキスト、例えば完全修飾クラス名に制約されることを期待します。 そのため、変更せずにコピー&ペーストすることはできません。 ペーストセーフなログ宣言のための提案は、他の回答で提供されていますが、それらはバイトコードを膨らませたり、実行時イントロスペクションを追加したりするなどの欠点があります。 私はこれらをお勧めしません。 コピーペーストは エディタ そのため、エディタによるソリューションが最も適切です。

IntelliJでは、Live Templateを追加することをお勧めします。

  • 省略形として "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);

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