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 回答