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

问题描述 投票:17回答:3

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

我的意思是说

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

int a, b, ; // compilation error
java enumeration
3个回答
21
投票

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

Enumbody具有以下规格:

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

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


18
投票

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

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

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

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


10
投票

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

更改:

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
  }

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

根据雷蒙德的回答:https://stackoverflow.com/a/11597911/5111897

© www.soinside.com 2019 - 2024. All rights reserved.