2011-01-15 14 views
13

私はコードを書いていて、 "、"はコンパイルエラーを起こさないことを突然見ています。どうして ?それぞれが独自の上のライン上にある場合は特に - それは要素を追加して並べ替えることが簡単だように、私はコンマ(、)はコンパイルエラーにならないのはなぜですか?

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

しかし

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

link?単純な答えですあなたの侵略の理由は何ですか? –

+4

これは興味深い質問です。列挙型の余分なカンマが受け入れられることは決してありませんでした。 – Reza

+0

Javaの構文はC言語の言語に基づいていて、私が知っている限り、それはどのようにC言語で行われたかです。 –

答えて

16

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

Enumbodyには、以下の仕様があります。

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

あなたはEnumConstantList後のオプションにコンマがある可能見ることができるように、これは単なる表記便利です。

+1

"JDKやその他のコードでは使用されていない"ため、レビュー担当者が好きではないコードレビューである可能性がある唯一の不都合は – Vlasec

14

何を意味

は、言語は、このように設計されました。

が良いものではなく、アレイは、同じ方法で複数の値を可能にする変数の宣言との比較:

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

を基本的には、あるソースコードで定義されたコレクションに追加の値に加算宣言文に変数を追加したいのではなく、もっと一般的です。

0

主なメリットは、複数行のリストを簡単に編集できるようにし、diffの混乱を減らすことです。

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

を:変更

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

は差分で唯一の行の変更が含まれます。

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

これは、とき、より混乱複数行の差分を打ちます末尾のカンマは省略されました:

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

後者のdiffでは、1行だけが追加され、もう1行は内容が変更されないことが分かりにくくなりました。

レイモンドの回答に基づいて:https://stackoverflow.com/a/11597911/5111897

+0

です。少なくとも、コンパイル可能なコードにしてください。引用符付きの値は有効な列挙型識別子ではありません。さらに、「マニー」の後にコンマを忘れてしまった。 –

関連する問題