Почему запятая (,) не вызывает ошибку компиляции?

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

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

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

но

int a, b, ; // compilation error

Ответы

Ответ 1

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

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

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

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

Ответ 2

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

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

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

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

Ответ 3

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

Изменение:

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

в

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

включает только однострочное изменение diff:

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

Это превосходит более запутанный многострочный diff, когда конечная запятая была опущена:

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

Последний diff затрудняет увидеть, что добавлена ​​только одна строка, а другая строка не изменила контент.

На основании ответа Раймонда: fooobar.com/info/24625/...