почему запятая (,) не приводит к ошибке компиляции? - PullRequest
17 голосов
/ 15 января 2011

Я пишу код, и вдруг вижу, что "," не вызывает ошибки компиляции.Почему?

Что я имею в виду

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

но

int a, b, ; // compilation error

Ответы [ 3 ]

21 голосов
/ 15 января 2011

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

Enumbody имеет следующую спецификацию:

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

Как видите, после EnumConstantList может быть необязательная запятая, это просто удобство обозначений.1007 *

18 голосов
/ 15 января 2011

Язык был разработан таким образом, чтобы можно было легко добавлять и изменять порядок элементов, особенно если каждый из них находится в отдельной строке.

Сравнение с объявлением переменных не очень хорошее, но массивы допускают большее количество значений таким же образом:

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

По сути, добавление дополнительных значений к коллекции, определенной в исходном коде, встречается гораздо чаще, чем желание добавить переменную в оператор объявления.

10 голосов
/ 26 июня 2017

Основные преимущества заключаются в том, что он облегчает редактирование многострочных списков и уменьшает беспорядок в diffs.

Изменение:

public enum Names{
     MANNY,
     MO,
     JACK,
}

до:

public enum Names{
     MANNY,
     MO,
     JACK,
     ROGER,
}

подразумевает изменение только одной строки в diff:

  public enum Names{ 
       MANNY,
       MO,
       JACK,
+      ROGER,
  }

Это лучше, чем запутанная многострочная разница, когда запятая не указана:

  public enum Names {
       MANNY,
       MO,
-      JACK
+      JACK,
+      ROGER
  }

Из-за последнего различия становится сложнее увидеть, что была добавлена ​​только одна строка, а другая не изменила содержание.

На основании ответа Раймонда: https://stackoverflow.com/a/11597911/5111897

...