web-dev-qa-db-ja.com

UPPER_SNAKE_CASEでfinal / constantローカル変数に名前を付けるのは慣例ですか?

非常に簡単です、私はメソッドを持っています:

public final void myMethod(User user, Group group) {
    final int MAX_USERS_PER_GROUP = group.getMaxUsersPerGroup();
    int usersInGroup = 0;

    // Get users in group and all subgroups, recursively

    if (usersInGroup > MAX_USERS_PER_GROUP) {
        throw new Exception(...);
    }
}

しかしEclipseによると:

この名前はお勧めしません。慣例によれば、ローカル変数の名前は小文字で始める必要があります。

私の心配は、これはすべてのアカウントで定数であり、そのようにフォーマットする必要があると考えていても、不正なコードとしてフラグが付けられることです。

6
NobleUplift

Javaのコードと命名規則はかなり確立されています。特に、これ(またはその不一致)は セクション9-命名規則 で確認できます。

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

static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;

重要な点は、これがコード例の変数であることです。一度割り当てたコードは変更できないというヒントを他のコーダーに与えたものですが、定数ではありません。さらに、それはclass定数ではありません。

public final void myMethod(User user, Group group) {
    final int MAX_USERS_PER_GROUP = group.getMaxUsersPerGroup();
    int usersInGroup = 0;

    // Get users in group and all subgroups, recursively

    if (usersInGroup > MAX_USERS_PER_GROUP) {
        throw new Exception(...);
    }
}

これは、命名基準によると正しくありません。

実行中のcheckstyleを調べてください。 命名規則 これに対するチェックは、Java命名規則に従っています。

ローカルの最終的な変数チェックは次のとおりです。

 LocalFinalVariableName 
キャッチパラメータを含むローカルの最終変数
 ^ [a-z] [a-zA-Z0-9] * $ 

小文字で始まり、アンダースコアは含まれません。もちろん、チームはこのJava標準と異なる場合があり、Tweak checkstyleのルールはすべて同じ規則に従っていることを確認しますが、コードを見ている他のJavaコーダーを混乱させることになります。

12
user40980

定数は、コンパイル前またはコンパイル中に既知の値が与えられたものです。

宣言したのは変数です。その値は実行時にメソッドを呼び出すことによって決定されるためです。これがfinalであるという事実は、いったん値が設定されると変更されないことをコンパイラーに知らせるための実際の便宜にすぎません。

2
Blrfl