Java 14 – Новые функции и улучшения

Java 14 стала общедоступной 17 марта 2020 года. В этом посте мы рассмотрим некоторые функции из списка из 16 новых функций, добавленных в язык программирования Java.

JEP 305 – Сопоставление шаблонов instanceof (Предварительный просмотр)

В Java 14 оператор instanceof был изменен, и теперь имеет проверку типа. Шаблон проверки типа (используемый в instanceof) состоит из предиката, который определяет тип, а также одной переменной привязки.

В приведенном ниже коде строка фразы s является шаблоном проверки типа:

if (obj instanceof String s) {
    // can use s here
} else {
    // can't use s here
}

В приведенном выше примере оператор instanceof “сопоставляет” целевой объект с шаблоном проверки типа, если объект является экземпляром String, то он преобразуется в String и присваивается переменной привязки s.

Обратите внимание, что шаблон будет совпадать только, и s будет присвоен только в том случае, если obj не равен null

JEP 368 – Текстовые блоки (Второй предварительный просмотр)

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

Текстовые блоки состоят из нескольких строк текста и используют три символа двойной кавычки («»») в качестве открывающего и закрывающего разделителя.

Экземпляр, созданный из текстового блока, имеет тип java.lang.String с теми же характеристиками, что и традиционная строка в двойных кавычках. Это включает в себя представление объектов и интернирование в пул строк.

Кроме того, текстовые блоки можно использовать везде, где можно использовать строковый литерал. Например, мы можем использовать его для конкатенации строк.

String string = "Hello";
String textBlock = """
                    World""";
  
String joinedString =  string + textBlock;
  
System.out.println(joinedString);

JEP 358 – Helpful NullPointerExceptions

Java 14 улучшает удобство использования исключения NullPointerException, генерируемого JVM, путем точного описания того, какая переменная была null.

Нужно передать -XX:+ShowCodeDetailsInExceptionMessages флаг JVM, чтобы включить эту функцию во время запуска приложения.

public class HelpfulNullPointerException 
{
    public static void main(String[] args) 
    {
        Employee e = null;
          
        System.out.println(e.getName());
    }
}

/*Output:
Exception in thread "main" java.lang.NullPointerException: 
    Cannot invoke "com.howtodoinjava.core.basic.Employee.getName()" because "e" is null
    at com.howtodoinjava.core.basic.HelpfulNullPointerException.main 
    (HelpfulNullPointerException.java:9)
*/

Только NPE, которые создаются и генерируются непосредственно JVM, будут включать сообщение с нулевой детализацией (сообщения, которые мы обычно передаем в конструкторе при создании исключения в программе). NPE, которые явно создаются и/или явно генерируются программами, работающими на JVM, не подлежат анализу байт-кода.

JEP 359 – Record (Предварительный просмотр)

Тип record был предварительно введен в Java 14 и должен использоваться в качестве простых неизменяемых классов данных для передачи данных между классами и приложениями.

Как и enum, record также является специальным типом класса в Java. Он предназначен для использования в тех местах, где класс создается только для того, чтобы выступать в качестве простого носителя данных.

Важное различие между классом и записью заключается в том, что цель записи — исключить весь шаблонный код, необходимый для установки и получения данных из экземпляра. Записи передают эту ответственность компилятору java, который генерирует конструктор, средства получения полей, hashCode() и equals(), а также методы toString().

public record EmployeeRecord(Long id, 
        String firstName, 
        String lastName, 
        String email, 
        int age) {
      
}

JEP 361 – Switch Expressions (Стандарт)

Оператор switch позволяет приложению иметь несколько возможных путей выполнения на основе значения данного выражения во время выполнения.

В Java 14, с выражением switch, весь блок switch “получает значение”, которое затем может быть присвоено переменной в том же операторе.

Он поддерживает несколько меток регистра и использует yield для возврата значения вместо старого ключевого слова return.

В случае перечисления мы можем пропустить регистр по умолчанию. Если есть какое-либо отсутствующее значение, не обработанное в случаях, компилятор будет жаловаться. Во всех других типах выражений (int, strings и т.д.) Мы также должны указать регистр по умолчанию.

public static Boolean isWeekDay (Day day) 
{
    Boolean result = switch(day) {
        case MON, TUE, WED, THUR, FRI ->
        { 
            System.out.println("It is WeekDay");
            yield true; 
        }
        case SAT, SUN ->
        { 
            System.out.println("It is Weekend");
            yield false; 
        }
    };
    return result;
}

JEP 343 – javapackager (Инкубатор)

С JDK 8 был выпущен инструмент под названием javapackager как часть комплекта JavaFX. Однако после того, как JavaFX отделился от Java с выпуском JDK 11, популярные пакеты java больше не были доступны.

Этот JEP создает простой инструмент упаковки, основанный на инструменте javapackager, который поддерживает собственные форматы упаковки, чтобы предоставить конечным пользователям естественный опыт установки. Эти форматы включают msi и exe в Windows, pkg и dmg в macOS, а также deb и rpm в Linux.

Инструмент может быть вызван непосредственно из командной строки или программно через API ToolProvider.

$ jpackage --name myapp --input lib --main-jar main.jar
Запись опубликована автором в рубрике Java с метками .

Добавить комментарий

Ваш адрес email не будет опубликован.

двенадцать − 2 =