2013-08-23 65 views
8

聲納顯示我一個小的工作說:聲納:數組應該包含尾隨逗號

- 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 }), 

我爲什麼要插入一個結尾逗號?

回答

15

爲什麼要插入尾隨逗號?

你不需要。我懷疑索納應該在那裏發出警告。

這取決於程序員的偏好他喜歡什麼。在數組末尾添加尾隨逗號,可以很容易地從數組中移除或添加任何條目。

所以,如果你有一個像數組:

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"); 

考慮一下,如果不允許尾隨逗號,那麼如何代碼會是什麼樣子。你將不得不分開處理最後一個元素。所以,這對代碼生成器來說很好。

+0

在我的情況下,Sonar Qube在Blocker中顯示「尾隨逗號」而不是警告。 –

5

JLS (§10.6) states

尾隨逗號可能出現在數組初始化的最後一個表達式之後,將被忽略。

這絕不是必要的。

但是,它是一種風格選擇,它可以使重新排序,操作和/或複製粘貼最後一個元素更容易。將RequiredPermissions.API_PASSWORD_RECOVER移動到另一個地方或粘貼到下面的新條目可能會更容易,因爲您不需要添加額外的逗號,並且可能會因錯誤輸入或錯誤輸入而導致語法錯誤。