В блоге « Предварительный просмотр языковой функции 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, являются их собственными. |