2011-01-15 4 views
13

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

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

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

но

int a, b, ; // compilation error 
+5

ссылка? просто простой ответ. в чем причина вашей агрессии? –

+4

Это интересный вопрос, я никогда не знал, что добавочная запятая в перечислении приемлема – Reza

+0

Синтаксис Java основан на семействе языков C, и, насколько я знаю, так оно и делается в C, для массивов в любом случае. –

ответ

16

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

Enumbody имеет следующие характеристики:

{ [EnumConstantList] [,] [EnumBodyDeclarations] } 

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

+1

единственное возможное неудобство, являющееся просмотром кода, где рецензент не нравится, потому что «он не используется ни в JDK, ни в остальном нашем коде» – Vlasec

14

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

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

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

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

0

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

Изменение:

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

+0

Вы должны, по крайней мере, сделать компилируемый код. Цитированные значения не являются допустимыми идентификаторами перечисления. Плюс вы забыли запятую после «Манни». –

Смежные вопросы