3

2 つのサブクラス A と B を持つ抽象クラス Parent があります。Parent には do() という静的メソッドが 1 つあります。その静的メソッドが、A.do() として呼び出されたときにクラス A のロガーにログ情報を追加し、B.do() として呼び出されたときに B をログに記録する方法があるかどうか疑問に思っています。いつもの

protected final Logger LOGGER = Logger.getLogger(getClass());

do() は静的メソッドであるため、Logger も静的である必要がありますが、getClass() メソッドは明らかに静的ではありません。

ありがとう。

4

3 に答える 3

1

private final static Logger LOGGER = Logger.getLogger(A.class);

独自のクラスを持つすべてのクラスlogger:クラスを指定することは問題ありません。

于 2013-03-22T14:00:00.370 に答える
0

私はそれをお勧めしませんが、あなたが本当にそれを望むなら...

public class A {
  public static void do() {
    doImpl(A.class);
  }
  protected static void doImpl(Class<?> refClass) {
  }
}

public class B extends A {
  public static void do() {
    doImpl(B.class);
  }
}
于 2013-03-22T14:22:12.490 に答える
-1

ベスト プラクティスは、LOGGER を静的に宣言することです。

protected final static Logger LOGGER = Logger.getLogger(getClass());

このようにして、動的および静的メソッドから LOGGER を使用できます。

また、各クラスにはロガーの独自のインスタンスが必要です。したがって、保護されたものを非公開に変更します。

また、「getClass()」を呼び出す代わりに、「MyApp.class」を呼び出す必要があります。

private final static Logger LOGGER = Logger.getLogger(MyApp.class);
于 2013-03-22T13:50:54.713 に答える