为什么逗号(,)不会导致编译错误?

17 java enumeration

我正在编写一个代码,突然看到","不会导致任何编译错误.为什么?

我的意思是说

public enum A {
    B, C, ; // no compilation error
}
Run Code Online (Sandbox Code Playgroud)

但

int a, b, ; // compilation error
Run Code Online (Sandbox Code Playgroud)

wic*_*ich 22

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

Enumbody具有以下规格:

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在EnumConstantList之后可以有一个可选的逗号,这只是一个符号方便.


Jon*_*eet 18

语言是这样设计的,因此可以轻松添加和重新排序元素 - 特别是如果每​​个元素都在一条线上.

与声明变量的比较不是很好,但是数组以相同的方式允许更多的值:

int[] foo = { 1, 2, 3, };
Run Code Online (Sandbox Code Playgroud)

基本上,在源代码中定义的集合中添加额外值比想要在声明语句中添加变量更常见.


Aks*_*rda 10

主要优点是它使多行列表更容易编辑,并减少差异的混乱.

更改:

public enum Names{
     MANNY,
     MO,
     JACK,
}
Run Code Online (Sandbox Code Playgroud)

至:

public enum Names{
     MANNY,
     MO,
     JACK,
     ROGER,
}
Run Code Online (Sandbox Code Playgroud)

差异只涉及差异的一行变化:

  public enum Names{ 
       MANNY,
       MO,
       JACK,
+      ROGER,
  }
Run Code Online (Sandbox Code Playgroud)

当省略尾随逗号时,这打败了更令人困惑的多行差异:

  public enum Names {
       MANNY,
       MO,
-      JACK
+      JACK,
+      ROGER
  }
Run Code Online (Sandbox Code Playgroud)

后一种差异使得更难以看到只添加了一行而另一行没有改变内容.

基于Raymond的回答:https://stackoverflow.com/a/11597911/5111897