いくつかの静的メソッドが必要なクラスがあります。これらの静的メソッド内で、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);
インポートを自動的に再フォーマットして最適化します。