Статьи

Играя с выражениями переключения JDK 12

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