новые разделители (пунктуаторы) Java 8+ - как и где они используются? - PullRequest
0 голосов
/ 11 февраля 2019

JLS для Java 8 представляет три новых разделителя :

...   @   ::

Многоточие (...) используется как " последний формальный параметр метода или конструктора».Но уже JLS для Java 7 описал этот формальный параметр как переменный параметр арности .Он не упоминается как разделитель.

Разделитель :: используется для формирования справочных выражений метода .

@означает ", чтобы отличить объявление типа аннотации от обычного объявления интерфейса " и, таким образом, является частью объявления типа аннотации .Аннотации уже были частью JLS для Java 7. Я не вижу другого использования для " at-sign ".

Поиск вопросов и ответов о разделителях Java 8+ Я ничего не нашел,что объясняет использование новых разделителей.

Что разделяют оба разделителя ..., @?Как они используются?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Верхнее предложение в вашей ссылке говорит:

В этой главе описывается лексическая структура языка программирования Java.

В этом весь смысл.Это (полуформальное) описание языка Java синтаксис .Мы не говорим здесь семантику, это просто "формулировка".Описание различных элементов в синтаксисе языка программирования Java.

Можно сказать, что в public foo(Bar... vararg)

  • ( отделяет имя метода от списка параметров
  • ... отделяет тип параметра от имени параметра

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

0 голосов
/ 11 февраля 2019

Прежде всего, как вы заметили, ... присутствовал в Java 7. (Я думаю, что он был представлен в Java 5!) Но в Java 8 они явно указали его в качестве одного из токенов «разделителя».

Я не думаю, что это имеет какое-то реальное значение.Это просто редакционная поправка.

Что означают оба разделителя ..., @ разделяются?

Они на самом деле ничего не разделяют.Они классифицируются как «разделители», потому что они не являются операторами, литералами, идентификаторами или ключевыми словами.

Примечания:

  1. В JLS 11, раздел 3.1, спецификация определяет альтернативный термин "пунктуатор".Ужасно, но точнее.)

  2. Было бы бесполезно для JLS различать «разделители», которые отделяют от тех, которые этого не делают.Термин «разделитель» практически не используется в остальной части спецификации и, конечно, не в любом контексте, который подразумевает разделение.

  3. Прецедент для "разделителей" не существует.Существующие токены (, ), {, }, [ и ] на самом деле также не действуют как разделители.Их целью является запуск или завершение конструкций.

  4. Токены < и > также немного странные.Лексическая грамматика называет их операторами, но в некоторых контекстах они действуют (свободно) как разделители.

Не пытайтесь слишком много читать в этом.

...