Почему запятая (,) не вызывает ошибку компиляции?
Я пишу код, и вдруг вижу, что "," не вызывает никакой ошибки компиляции. Почему?
Что я имею в виду
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/...