0

これを行う理由はありますか?

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

これの代わりに?

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

構文上の利点がお互いに何であるかを私は理解していません。どちらも正常に機能しているようです。

4

6 に答える 6

5

定数の名前はすべて大文字であるというのは、C /C++の世界から受け継がれた規則です。Javaでは、定数に最も近いものはであるためstatic final、これらのメンバーは同じように名前が付けられることがよくあります。

この場合、ロガーオブジェクトは意味的に定数ではないため、区別はそれほど重要ではない可能性があります。それでも、staticクラスごとに1つのインスタンスがあることを確認するために宣言することをお勧めします。finalまた、オブジェクトへの参照を後で変更できないようにするために宣言することもできます(そして、この事実を読者に伝えるために)。コード)。

@Moncaderのコメントへの更新:

  1. staticはC++(クラス)と同等ですstatic-定数を非静的として宣言することはC ++ではあまり意味がないだけでなく、Javaでも意味がありません。

  2. finalC++と直接同等ではありませんconst。これは、問題の参照を変更できないことを意味します。ただし、参照されるオブジェクトの変更を妨げることはありません。intしたがって、プリミティブ値(eg )または不変オブジェクトへの参照(eg)を保護する場合にのみconstとして機能しますString。私たちの現在のトピックにとどまるために、考慮してください

    private static final Logger logger = LoggerFactory.getLogger(Main.class); ... logger.setLevel(Level.INFO); logger.addAppender(...); logger.setAdditivity(false);

これらの呼び出しはすべて、宣言されていても、明らかにロガーの状態を変更していますfinal。これは、ロガーオブジェクトが意味的に定数ではないことを示すことによって上記で意味したことです。

于 2010-09-26T14:34:00.543 に答える
3

なぜそれを最終的にするのですか?

これにより、現在のロガーを誰も変更できないことが確実になります。

なぜロガーではなくロガーなのか?

これはJavaの慣習です。定数は大文字で名前が付けられます。

クラス定数として宣言された変数およびANSI定数の名前は、すべて大文字で、単語をアンダースコア( "_")で区切る必要があります。(デバッグを容易にするために、ANSI定数は避ける必要があります。)


資力 :

于 2010-09-26T14:33:52.877 に答える
2

final他のものを指すように参照を変更できないことを意味します。

大文字は、これが静的クラス定数であることを読者に示唆する単なるコーディング規約です。特に、参照するときに短いクラス名を前に付ける場合(たとえばFoo.LOGGER.info("message");)、1999年のSunJavaコーディング規約を参照してください。

于 2010-09-26T14:34:06.347 に答える
1

一部の(すべてではない)Java VMは、最終定数を最適化して、ロガーへのアクセスを高速化します。したがって、プログラム内のどこかの値が決して変更されない場合は、それを最終的なものにします。

LOGGERは、Javaの人々が定数に対して行うことです。本当に小文字にしたい場合は、パフォーマンスやプログラムの面で違いはありません。

于 2010-09-26T14:36:06.160 に答える
0

機能的な違いはありません。最初の例では、ロガーは定数であり、変更することはできません。定数にすべて大文字を使用するのはJavaの規則です。2番目の例では、ロガーは静的ですが最終的なものではないため、呼び出し元のコードによって変更できます。あなたはおそらくそれを望まないので、私は最初のオプションを使用します。

于 2010-09-26T14:35:23.650 に答える
0

PMDなどのコードチェックツールを使用する場合は、 static final logger(小文字)が警告としてフラグ付けされることがわかります。

私が以前に尋ねたこのSOの質問では、大文字と小文字のロガーの議論についてさらに詳しく説明します。

于 2010-09-26T15:14:27.973 に答える