В блоге « Предварительный просмотр языковой функции JDK в действии: переключение выражений » я рассказал о том, как JEP 325 [«Переключать выражения ( предварительный просмотр )») является ранним применением определенной « языковой функции предварительного просмотра », как изложено в JEP 12 [« Язык предварительного просмотра и функции VM ». JEP 325 предназначен для 12 JDK . Более того, ранние сборки доступа для JDK 12 уже поддерживают эту функцию языка предварительного просмотра!
Я был в восторге от возможностей, связанных с выражениями-переключателями, как было продемонстрировано в моих предыдущих публикациях в блоге « Переключение выражений на Java? «,« Усовершенствование оператора переключения Java с введением выражения переключения »и вышеупомянутый« Предварительный просмотр языковых возможностей JDK в действии: выражения переключения ». Сборки раннего доступа JDK 12 позволяют очень легко начать экспериментировать с этой функцией языка предварительного просмотра, и я демонстрирую это с использованием сборки раннего доступа JDK 12 10 (2018/9/6) [последняя сборка на момент написания статьи].
Вместо того, чтобы затрачивать какие-либо дополнительные усилия на создание собственного творческого примера выражения switch, я собираюсь позаимствовать один из примеров, представленных в настоящее время в самом JEP 325 (в начале раздела «Описание»). Этот пример действительно расширенный оператор switch, а не выражение switch, но он требует той же поддержки предварительного просмотра языка и является частью этой функции. Список кодов для этого адаптированного примера показан ниже.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package dustin.examples.jdk12.switchexp;public class SwitchExpressionsDemo{ /** * This example is adopted from the JEP 325 text * * @param k Value to be switched upon. */ static void howMany(final int k) { switch (k) { case 1 -> System.out.println("one"); case 2 -> System.out.println("two"); case 3 -> System.out.println("many"); } } /** * Execute demonstration discussed in JEP 325 using custom * method {@link #howMany(int)}. */ public static void demonstrateHowMany() { howMany(1); howMany(2); howMany(3); } public static void main(final String[] arguments) { demonstrateHowMany(); }} |
Когда я пытаюсь скомпилировать приведенный выше код с помощью компилятора javac JDK 12 без каких-либо специальных флагов, я вижу сообщение об ошибке: «ошибка: правила переключения являются функцией предварительного просмотра и по умолчанию отключены». Это сообщение об ошибке также содержит полезную подсказку «(используйте --enable-preview для включения правил переключения)».
Передача флага --enable-preview в компилятор javac JDK 12 javac мне преодолеть только что показанную ошибку, но затем мне напоминают, что флаг --enable-preview следует использовать вместе с флагом -source или --release флаг. Сообщение об ошибке ясно гласит: «ошибка: --enable-preview должен использоваться либо с -source либо с --release ».
Я решил использовать флаг --release 12 используемый вместе с параметром --enable-preview и это позволяет скомпилировать пример демонстрации расширенного оператора switch.
Пример расширенного оператора switch компилируется с параметрами --enable-preview и --release 12 , передаваемыми компилятору javac JDK 12, но, как показывают выходные данные в последнем снимке экрана, появляется сообщение о том, что скомпилированный класс «использует Предварительный просмотр возможностей языка »и рекомендует:« Перекомпилировать с -Xlint: предварительный просмотр для деталей » Следующий снимок экрана демонстрирует результаты указания -Xlint:preview :
Передача флага -Xlint:preview компилятору javac JDK 12 при компиляции примера демонстрации выражений переключателя привела к трем предупреждающим сообщениям, указывающим на конкретные строки кода с использованием выражения переключателя ( -> синтаксис) и констатирующему: «warning: [preview] Правила переключения являются функцией предварительного просмотра и могут быть удалены в будущем выпуске ».
С улучшенной компиляцией кода оператора switch теперь пришло время попробовать выполнить код. Если средство запуска java JDK 12 вызывается без каких-либо флагов, указывающих на использование функции предварительного просмотра, отображается сообщение об ошибке: «java.lang.UnsupportedClassVersionError: Функции предварительного просмотра не включены для… Попробуйте запустить с« –enable-preview ».
Когда --enable-preview передается в средство запуска java JDK 12, демонстрация запускается успешно, как показано на следующем снимке экрана.
Когда выходные данные, показанные в последнем снимке экрана, сравниваются с исходным кодом демонстрации расширенного оператора switch, изложенной в начале этого поста, некоторые наблюдения можно быстро сделать. Возможно, наиболее заметным является то, что в этом примере не было операторов break , но не произошло никаких изменений, несмотря на отсутствие операторов break . Это именно то, что должно происходить в JEP 325 для выражений переключения и для расширенных операторов переключения: «Если метка совпадает, то выполняется только выражение или выражение справа от метки стрелки; нет провала ». Наличие стрелки (->) указывает на то, что мы используем выражение-переключатель или расширенный оператор-переключатель, где выражение или оператор будут полностью разрешены с помощью того, что находится справа от «стрелки» (и поэтому явного break обязательный). Наличие «двоеточия» (вместо «стрелки») со связанным break в выражении переключателя или расширенном выражении переключателя позволяет указывать несколько строк.
Существует гораздо больше, чтобы увидеть и попробовать, связанные с выражениями переключения и расширенными операторами переключения. Тем не менее, эта статья была посвящена представлению доступности выражений коммутатора и расширенной поддержке операторов коммутации в ранних сборках доступа JDK 12 и предоставила простой пример такой поддержки. Интересно начать играть с выражениями переключения Java и расширенными операторами переключения! Также интересно думать о мире без прорыва! Это будет только функция «предварительного просмотра» для JDK 12, но я с нетерпением жду начала конца для переключения коммутатора.
| Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: Игра с выражениями переключения JDK 12
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |






