声纳:数组应包含尾随逗号

Jor*_*.S. 12 java eclipse syntax sonarqube

声纳向我展示了一个小工作的说法:

- Array Trailing Comma
Array should contain trailing comma.
Run Code Online (Sandbox Code Playgroud)

我的代码包含:

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 }),
Run Code Online (Sandbox Code Playgroud)

我为什么要插入一个尾随逗号?

Roh*_*ain 18

我为什么要插入一个尾随逗号?

你不需要.我怀疑声纳应该只是在那里发出警告.

这取决于程序员的偏好他喜欢什么.在数组末尾添加一个尾随逗号,可以很容易地从数组中删除或添加任何条目.

所以,如果你有一个像这样的数组:

String[] arr = new String[] {
                  "abc",
                  "def",
                  "ghi",
               }
Run Code Online (Sandbox Code Playgroud)

添加条目只需要在数组末尾添加带有逗号的条目.如果没有逗号,您首先需要添加逗号,然后添加元素.

删除元素只需要删除包含该元素的那一行.或者只是评论出那条线.

String[] arr = new String[] {
                  "abc",
                  "def",  
              //  "ghi",    // This won't cause any error
               }
Run Code Online (Sandbox Code Playgroud)

如果不允许使用尾随逗号,那么如果删除最后一个元素,则必须先删除它之前的逗号.嗯,我知道这个理由很荒谬.但这只是允许的.


这对于代码生成器在生成阵列初始化代码时非常有用.他们可以简单地在数组中添加带尾随逗号的元素,而不必担心它是否是最后一个元素.

我们来举个例子:

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");
Run Code Online (Sandbox Code Playgroud)

考虑是否允许使用尾随逗号,那么代码的外观如何.你必须分别处理最后一个元素.所以,它只对代码生成器做得很好.


ζ--*_*ζ-- 5

JLS(§10.6)规定:

尾随逗号可能出现在数组初始值设定项中的最后一个表达式之后,将被忽略.

这绝不是必要的.

但是,它有点像样式选择,它可以使重新排序,操作和/或复制粘贴最后一个元素变得更容易.移动RequiredPermissions.API_PASSWORD_RECOVER到另一个地方或粘贴下面的新条目可能会更容易,因为您不需要添加额外的逗号,并冒着错误或错误点击的语法错误.