2

私はいくつかのコードを見ていて、クラスでログインスタンスを定義する多くの方法を見てきました。ここにそれらのいくつかがあります

protected static final Logger LOG
final Logger LOG

持っている人はほとんどいません

protected static final Logger log
final Logger log

これは、静的なfinalとして定義して保護されているものもあれば、finalのみとして定義しているものもあれば、すべて大文字で変数を宣言しているものもあれば、正規形であるものもあるため、私はすべて混乱しました。

宣言の適切な方法、または個人的な選択やプロジェクト固有の決定の問題を誰かが知ることができますか?

4

4 に答える 4

2

私はいつも行きます

private static final Logger logger.

その理由は、このクラスを拡張するどのクラスからもアクセス可能であってはならないからです (保護されている場合と同様)。拡張クラスは、独自のロガーを定義する必要があります。

デフォルト(保護/プライベート/パブリックなし)を使用すると、同じパッケージまたはサブクラス内のクラスがロガーにアクセスできるため、さらに悪化します。

protected を使用して警告を回避することについてのコメントについては、怠惰で悪いコーディングです。警告には理由がありますが、コンパイルをブロックするものではありません。

于 2012-05-22T09:53:18.987 に答える
1

最善の方法は、すべてのクラスでそのような変数を使用せずに作業することですが、jcabi-log の slf4j の周りに静的ユーティリティ ラッパーを使用します。

Logger.debug(this, "some variable = %s", value);
于 2012-10-05T06:34:15.893 に答える
0

私も使っています

private static final Logger logger = Logger.getLogger(MyClass.class).

非静的宣言を使用する唯一の理由:

private final Logger logger = Logger.getLogger(getClass())

あるクラスから別のクラスに間違いなく安全にコピー/貼り付けできるということです。多くの場合、クラスをコピーして貼り付けたりリファクタリングしたりしてから、デバッグ用にロガーを構成するときに混乱する可能性のあるLogger.getLogger(One.class)内部クラスを使用します。Two

于 2012-05-22T09:57:21.827 に答える
0

私があなたを正しく理解していれば、あなたを混乱させているのは次のことです。

  1. 最初の例の変数名は大文字です: LOG.
  2. 2 番目の例の変数名は小文字ですlog
  3. 単純にfinal型変数として宣言されている場合もあれば、型変数として宣言されている場合もありprotected static finalます。

もしそうなら、

LOGlogまったく同じです。ただし、プログラマーが定数を大文字で宣言するのは一般的な方法であることを知っておく必要があります。Javaのfinalキーワードは、定数のままにしたい変数を定義します。繰り返しますが、コンパイラは定数を大文字で書く必要はありませんが、そうするのが一般的な方法です。そのため、一部のプログラマは小文字を使用し、他のプログラマは大文字を使用します。それは好みの問題です。

Javaのprotectedキーワードは、クラスのメソッドだけでなく、それを継承するサブクラスのメソッドからも変数にアクセスできるようにすることを意味します。

Java の static キーワードは、変数/フィールドに適用されると、これらのフィールドは静的メソッドによってのみ参照できることを示します。

そう、

protected static final Logger LOGmeansLOGは定数変数で変更されず、このクラスの静的メソッドからアクセスでき、このクラスから継承する任意のクラスのオブジェクトからアクセスできます。

と、

final Logger LOGmeansLOGは定数変数で変更されず、PACKAGE 内の任意のメソッドからアクセスできます。継承が存在するかどうかは問題ではありません。

他の人たちと同じように、私も一緒に行きprivate static final logger LOGます。

何が起こっているのかをより深く理解するには、Java アクセス制御に関する次のドキュメントをお読みください。

Java でのアクセス制御

これがお役に立てば幸いです。

于 2012-05-22T10:31:29.797 に答える