16

ソナーは私にマイナーな作業を示しています:

- Array Trailing Comma
Array should contain trailing comma.

そして私のコードには以下が含まれています:

RECOVER_PASSWORD(new String[] {
        RequiredPermissions.USERS_PASSWORD_RECOVER,
        RequiredPermissions.USER_RETRIEVE,
        RequiredPermissions.API_USER_RETRIEVE,
        RequiredPermissions.ONETIMELINK_CREATE,
        RequiredPermissions.API_ONETIMELINK_CREATE,
        RequiredPermissions.PASSWORD_RECOVER,
        RequiredPermissions.API_PASSWORD_RECOVER }),

末尾のコンマを挿入する必要があるのはなぜですか?

4

2 に答える 2

20

末尾のコンマを挿入する必要があるのはなぜですか?

その必要はありません。ソナーはそこに警告を表示するだけだと思います。

彼が何を好むかは、プログラマーの好みに依存します。配列の末尾にコンマを追加すると、後で配列からエントリを削除または追加するのが簡単になります。

したがって、次のような配列がある場合:

String[] arr = new String[] {
                  "abc",
                  "def",
                  "ghi",
               }

エントリを追加するには、配列の末尾にカンマを付けてそのエントリを追加するだけです。コンマがなければ、最初にコンマを追加し、次に要素を追加する必要があります。

要素を削除するには、その要素を含む行を削除するだけです。または、その行をコメントアウトするだけです。

String[] arr = new String[] {
                  "abc",
                  "def",  
              //  "ghi",    // This won't cause any error
               }

末尾のコンマが許可されていない場合、最後の要素を削除すると、その前のコンマも削除する必要があります。まあ、私はこの理由が非常にばかげていることを知っています。ただ、それは許されています。


これは、配列の初期化用のコードを生成するときに、コード ジェネレーターにとって非常に有益です。最後の要素かどうかを気にせずに、末尾にコンマを付けて要素を追加し続けることができます。

例を見てみましょう:

StringBuilder array = new StringBuilder();

array.append("int[] arr = new int[] {").append("\n");
for (int i = 0; i < 10; ++i) {
    array.append(i + ",").append("\n");
}
array.append("}").append("\n");

末尾のコンマが許可されていない場合、そのコードがどのように見えるかを検討してください。最後の要素を個別に処理する必要があります。つまり、コード ジェネレーターにとっては良いことです。

于 2013-08-23T09:31:18.390 に答える
6

JLS (§10.6) は次のように述べています

末尾のコンマは、配列初期化子の最後の式の後に表示される場合があり、無視されます。

それは決して必要ではありません。

ただし、これは多少のスタイルの選択であり、最後の要素の並べ替え、操作、および/またはコピーと貼り付けを容易にすることができます。別の場所に移動RequiredPermissions.API_PASSWORD_RECOVERしたり、その下に新しいエントリを貼り付けたりするのは簡単です。余分なコンマを追加する必要がなく、入力ミスやクリックミスによる構文エラーのリスクを冒す必要がないからです。

于 2013-08-23T09:31:28.690 に答える