2011-01-15 52 views
13

Tôi đang viết mã và đột nhiên thấy rằng "," không gây ra bất kỳ lỗi biên dịch nào. Tại sao ?tại sao dấu phẩy (,) không gây ra lỗi biên dịch?

Những gì tôi có nghĩa là

public enum A { 
    B, C, ; // no compilation error 
} 

nhưng

int a, b, ; // compilation error 
+5

liên kết? chỉ là một câu trả lời đơn giản. lý do gây hấn của bạn là gì? –

+4

Đây là một câu hỏi thú vị, tôi không bao giờ biết rằng dấu phẩy thừa trong enum là chấp nhận được – Reza

+0

Cú pháp Java dựa trên họ ngôn ngữ C, và theo như tôi biết, đó là cách nó được thực hiện trong C, cho mảng anyway. –

Trả lời

16

http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.9

Các Enumbody có đặc điểm kỹ thuật sau:

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

Như bạn có thể thấy có thể là một dấu phẩy tùy chọn sau khi EnumConstantList, đây chỉ là một sự tiện lợi ký hiệu.

+1

sự bất tiện duy nhất có thể là đánh giá mã nơi người đánh giá không thích nó, bởi vì "nó không được sử dụng trong JDK cũng như trong phần còn lại của mã" – Vlasec

14

Ngôn ngữ được thiết kế theo cách này để nó dễ dàng để thêm và sắp xếp lại các yếu tố - đặc biệt là nếu mỗi người là trên một dòng riêng của mình.

Việc so sánh với tuyên bố biến không phải là một tốt nhất, nhưng mảng cho phép giá trị hơn trong cùng một cách:

int[] foo = { 1, 2, 3, }; 

Về cơ bản, thêm vào giá trị thêm vào một bộ sưu tập được xác định trong mã nguồn là khá phổ biến hơn là muốn thêm một biến vào một tuyên bố khai báo.

0

Ưu điểm chính là nó làm cho danh sách nhiều dòng dễ dàng chỉnh sửa hơn và nó làm giảm sự lộn xộn trong các khác biệt.

Thay đổi:

public enum Names{ 
    'manny', 
    'mo', 
    'jack', 
} 

tới:

public enum Names{ 
    'Manny' 
    'mo', 
    'jack', 
    'roger', 
} 

chỉ liên quan đến một sự thay đổi một dòng trong diff:

public enum Names{ 
     'manny', 
     'mo', 
     'jack', 
+  'roger', 
    } 

này nhịp đập nhiều dòng khó hiểu hơn diff khi dấu phẩy sau bị bỏ qua:

public enum Names { 
     'manny', 
     'mo', 
-  'jack' 
+  'jack', 
+  'roger' 
    } 

Sự khác biệt thứ hai làm cho khó có thể thấy rằng chỉ có một dòng được thêm vào và dòng kia không thay đổi nội dung.

Dựa trên câu trả lời của Raymond: https://stackoverflow.com/a/11597911/5111897

+0

Ít nhất bạn nên làm cho mã có thể biên dịch được. Giá trị được trích dẫn không phải là số nhận dạng enum hợp lệ. Thêm vào đó bạn đã quên dấu phẩy sau 'Manny'. –

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