2013-08-23 32 views
8

Sonar chỉ cho tôi một công việc nhỏ nói:Sonar: Array nên chứa trailing dấu phẩy

- Array Trailing Comma 
Array should contain trailing comma. 

Và mã của tôi chứa:

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

Tại sao tôi nên chèn một dấu phẩy dấu?

Trả lời

15

Tại sao tôi nên chèn dấu phẩy sau?

Bạn không cần. Tôi nghi ngờ Sonar chỉ cần được hiển thị một cảnh báo ở đó.

Tùy thuộc vào tùy chọn của người lập trình mà anh ấy thích. Thêm dấu phẩy ở cuối mảng, giúp dễ dàng xóa hoặc thêm bất kỳ mục nhập nào sau này từ mảng.

Vì vậy, nếu bạn có một mảng như:

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

Thêm một mục chỉ yêu cầu bạn thêm vào đó với trailing dấu phẩy ở cuối của mảng của bạn. Nếu không có dấu phẩy, trước tiên bạn sẽ cần thêm dấu phẩy, sau đó là phần tử.

Và việc xóa phần tử chỉ yêu cầu bạn xóa dòng đó chứa phần tử đó. Hoặc chỉ bình luận ra dòng đó.

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

Nếu dấu phẩy sau không được phép, thì nếu bạn xóa phần tử cuối cùng, bạn cũng sẽ phải xóa và xóa dấu phẩy trước đó. Vâng, tôi biết lý do này là khá ngớ ngẩn. Nhưng điều đó chỉ được cho phép.


Điều này rất có lợi cho các trình tạo mã trong khi tạo mã cho khởi tạo mảng. Chúng đơn giản có thể tiếp tục thêm các phần tử với dấu phẩy ở trong mảng, mà không lo lắng về việc đó có phải là phần tử cuối cùng hay không.

Hãy lấy một ví dụ:

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

Cân nhắc nếu dấu phẩy trailing không được phép, thì làm sao mã mà sẽ trông như thế nào. Bạn sẽ phải xử lý phần tử cuối cùng một cách riêng biệt. Vì vậy, nó chỉ làm tốt cho các trình tạo mã.

+0

Trong trường hợp của tôi, Sonar Qube đang hiển thị "dấu phẩy sau" trong Trình chặn và không phải là Cảnh báo. –

5

JLS (§10.6) states:

Một dấu phẩy dấu có thể xuất hiện sau khi các biểu hiện cuối cùng trong một initializer mảng và được bỏ qua.

Không cần thiết.

Tuy nhiên, đó là một lựa chọn phong cách, và nó có thể làm cho mọi việc dễ dàng hơn để sắp xếp lại, thao tác và/hoặc sao chép phần tử cuối cùng. Di chuyển RequiredPermissions.API_PASSWORD_RECOVER sang một vị trí khác hoặc dán vào các mục nhập mới bên dưới có thể dễ dàng hơn vì bạn không cần phải thêm dấu phẩy thừa và có nguy cơ lỗi cú pháp từ các loại sai hoặc các dấu sai.

Các vấn đề liên quan