2013-08-23 17 views
8

Sonar pokazuje mi niewielką pracę mówiąc:Sonar: Array powinna zawierać końcowe przecinek

- Array Trailing Comma 
Array should contain trailing comma. 

A mój kod zawiera:

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

Dlaczego powinienem wstawić przecinek trailing?

Odpowiedz

15

Dlaczego powinienem wstawiać końcowy przecinek?

Nie musisz. Podejrzewam, że Sonar powinien pokazywać ostrzeżenie.

Zależy od preferencji programisty, co preferuje. Dodanie końcowego przecinka na końcu tablicy ułatwia usunięcie lub dodanie dowolnego wpisu później z tablicy.

Tak więc, jeśli masz tablicę jak:

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

Dodawanie wpisu jedynie wymaga, aby dodać ten wpis ze spływu przecinek na końcu swojej tablicy. Bez przecinka trzeba najpierw dodać przecinek, a następnie element.

Usunięcie elementu wymaga usunięcia tej linii zawierającej ten element. Lub po prostu komentując tę ​​linię.

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

Jeśli końcowe przecinek nie było dozwolone, a następnie, jeśli usunąć ostatni element, to będzie musiał przejść i usunąć przed nim zbyt przecinek. Wiem, że ten powód jest dość absurdalny. Ale to jest dozwolone.


Jest to bardzo korzystne dla generatorów kodu podczas generowania kodu do inicjalizacji macierzy. Mogą po prostu dodawać elementy z przecinkiem w tablicy, nie martwiąc się o to, czy to ostatni element.

Weźmy przykład:

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

Zastanów się, czy końcowe przecinek nie było dozwolone, to w jaki sposób, że kod będzie wyglądać. Będziesz musiał obsłużyć ostatni element osobno. Po prostu działa dobrze dla generatorów kodu.

+0

W moim scenariuszu Sonar Qube pokazuje "końcowy przecinek" w Blocker, a nie jako Ostrzeżenie. –

5

JLS (§10.6) states:

tylnego przecinek może pojawić się po ostatnim ekspresji w inicjatorze tablicy i jest ignorowana.

Nie jest to w żaden sposób konieczne.

Jest to jednak pewien wybór stylu i może ułatwić porządkowanie, manipulowanie i/lub kopiowanie wklejonego ostatniego elementu. Przeniesienie RequiredPermissions.API_PASSWORD_RECOVER do innego miejsca lub wklejenie nowych wpisów poniżej może być łatwiejsze, ponieważ nie trzeba dodawać dodatkowego przecinka i ryzykować błędem składni w postaci błędnych lub błędnych kliknięć.