Рекомендации по переходу с Java 11 на Java 17

Java 17 привнесла некоторые изменения в Java, но также заставила многих разработчиков пересмотреть свое желание перейти на другие языки JVM. Наиболее очевидные изменения касаются модернизации кода Java и добавления новых языковых конструкций для его упрощения. Конечно, эта проблема не обходится без изменений в ядре Java, которые делают Java более эффективной.

1. Текстовый блок

Функциональность текстового блока наконец-то появилась в Java. Я уверен, что это одно из долгожданных изменений для Java-программистов. Теперь вы можете забыть о длинных составных строках, которые трудно читать. Текстовые блоки позволяют писать многострочный текст наиболее удобным способом. В таком блоке вы можете писать текст так, как хотите, и при этом использовать escape-последовательности для более точного форматирования.

Java11.Строковые управляющие последовательности:

public String poem = "                " +
            "Twinkle, Twinkle, Little Star\n" +
            "                \n" +
            "                Twinkle, twinkle, little star,\n" +
            "                How I wonder what you are!\n" +
            "                Up above the world so high,\n" +
            "                Like a diamond in the sky.\n" +
            "                \n" +
            "                Twinkle, twinkle, little star,\n" +
            "                How I wonder what you are!";

Java 17. Текстовый блок:

public String poem = """
                Twinkle, Twinkle, Little Star
                
                Twinkle, twinkle, little star,
                How I wonder what you are!
                Up above the world so high,
                Like a diamond in the sky.
                
                Twinkle, twinkle, little star,
                How I wonder what you are!
            """;

2、Запись

Другим обновлением, которое постепенно сделало язык Java более полезным, были записи. Раньше для создания класса нам нужно было описать класс, указать его поля и добавить необходимые методы, такие как equals, hashcode, геттеры и сеттеры. Все это теперь ненужно с появлением пластинок.

Record позволяет создавать безопасные для данных классы, указывая только обязательные поля, все остальные методы будут созданы автоматически. Однако стоит помнить, что записи выступают в роли классов данных, созданных для хранения данных, а не для выполнения различных операций. Записи потокобезопасны, поскольку все поля записи являются окончательными. И последнее, что важно знать, это то, что сгенерированные методы, используемые для получения значений полей, не будут содержать «get», как в классических Java Beans.

Java 11. Класс данных:

public class DataClass {
    public DataClass (Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    private final Integer id;
    private final String name;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        ...
    }

    @Override
    public int hashCode() {
        ...
    }
}

Java17.Запись

public record DataClass(Integer id, String name) {
}

Разница очевидна: для создания записи требуется гораздо меньше строк кода при той же функциональности.

3. Новое выражение переключения

Списки изменений также включают выражения переключения. Эти изменения коснулись не только синтаксиса выражений Switch (что сделало его более лаконичным для записи), но и функциональности. Выражения переключения теперь возвращают результат итерации, что упрощает написание кода и делает его более кратким. Новое выражение switch больше не требует добавления разрыва после каждого случая.

Java11.выражение переключения:

public String getSeasonDescription(Season season) {
        String seasonDescription;
        switch (season) {
            case SPRING:
                seasonDescription = "Flowers are blooming!";
                break;
            case SUMMER:
                seasonDescription = "It's hot outside!";
                break;
            case AUTUMN:
                seasonDescription = "Leaves are falling!";
                break;
            case WINTER:
                seasonDescription = "Snow is coming!";
                break;
            default:
                throw new IllegalStateException("Invalid season: " + season);
        }
        return seasonDescription;
    }

Java 17. Расширенное выражение Switch:

public String getSeasonDescription(Season season) {
        return switch (season) {
            case SPRING -> "Flowers are blooming!";
            case SUMMER -> "It's hot outside!";
            case AUTUMN -> "Leaves are falling!";
            case WINTER -> "Snow is coming!";
        };
    }

4. пример сопоставления с образцом

Еще одно усовершенствование конструкции коснулось и оператора. Теперь безопаснее и лаконичнее. С этим изменением больше не нужно сначала проверять, является ли данный объект экземпляром какого-то класса, а затем выполнять приведение, теперь это можно сделать в одну строку. Как уже упоминалось, это не просто синтаксический сахар, а более оптимизированный оператор.

Java 11. Классический экземпляр

public void findInstance(Object o) {
        if (o instanceof String) {
            String s = (String) o;
            System.out.printf("Object is a string %s", s);
        } else if (o instanceof Number) {
            Number n = (Number) o;
            System.out.printf("Object is a number %n", n);
        }
    }

Java 17. Обновленный instanceof

public void findInstance(Object o) {
        if (o instanceof String s) {
            System.out.printf("Object is a string %s", s);
        } else if (o instanceof Number n) {
            System.out.printf("Object is a number %n", n);
        }
    }

5. Запечатанные классы

Java 17 также учитывает безопасность и делает важный шаг в этом направлении. Идея состоит в том, чтобы ограничить наследование класса или интерфейса, оставив его общедоступным. В результате в Java был добавлен новый тип класса — запечатанный класс. Синтаксис закрытого класса позволяет указать потомков, чьи функции можно использовать. Наследники, в свою очередь, могут разрешать или запрещать наследование или указывать классы, которые могут наследоваться по цепочке. Эта функция позволяет более гибко создавать проекты и легко настраивать API вашего кода.

Java 17. Запечатанные классы:

public sealed class SealedClass permits AnotherSealedClass, AnotherNonSealedClass, AnotherFinalClass {
}

Ява 17. Незапечатанные наследники:

public non-sealed class AnotherNonSealedClass extends SealedClass {
}

Ява 17. Последние наследники:

public final class AnotherFinalClass extends SealedClass {
}

Ява 17. Запечатанные наследники:

public sealed class AnotherSealedClass extends SealedClass permits AnotherNonSealedClassTwo {
}

Джавай 17. Распечатанный наследник второго уровня:

public non-sealed class AnotherNonSealedClassTwo extends AnotherSealedClass {
}

6、Исключения NullPointerException

Наконец, очень полезным обновлением в Java 17 является улучшенное исключение NullPointerException! Наконец, в журнале трассировки стека можно увидеть, какое именно поле вызвало исключение NullPointerException. Одна только эта функция должна побудить вас перейти на Java 17. Вам больше не нужно часами копаться в своем коде, чтобы найти зловещие места, где возникают исключения; теперь Java сделает всю работу за вас.

Java11.ИМЯ:

public static void main(String... args) {
        String s = null;
        System.out.println(s.toLowerCase());
    }
Exception in thread "main" java.lang.NullPointerException
 at Main.main(Main.java:4)

Java 17. Улучшенный NPE:

public static void main(String... args){
        String s = null;
        System.out.println(s.toLowerCase());
    }
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toLowerCase()" because "s" is null
 at edu.javamodules/edu.javaversions.eleventoseventeen.NpeExample.main(NpeExample.java:7)

7. Другие новшества

Конечно, это не исчерпывающий список изменений, внесенных в Java 17, но рассмотренные нововведения являются наиболее заметными. Как всегда, разработчики Java проделали большую работу по улучшению JVM, чтобы сделать ее более эффективной.

8. Резюме

Все улучшения, сделанные в Java 17, посылают сообщение: пора переходить на эту версию. Синтаксис обещания перехода стал чище, а производительность улучшена. Ваши проекты получат безопасность, гибкость и улучшенные сообщения об ошибках. Если вы уже перешли на Java11, переход на Java17 пройдет гладко. Здесь проявляются конкурентные преимущества Java, поскольку обратная совместимость позволяет перейти на Java 17 без изменения кода и воспользоваться всеми новыми функциями. Java17 — это еще один выпуск LTS (долгосрочная поддержка) после Java11, который гарантирует, что вы будете получать все необходимые обновления безопасности в течение длительного периода времени.

9. Java как инструмент разработки языка

Инструменты быстрой разработки JNPF представляют собой набор платформ инструментов цифровых технологий, которые могут реализовать быстрое построение, организацию данных, экологию соединений, промежуточные услуги и т. д. на основе более эффективных методов, таких как графическое перетаскивание и параметризованная конфигурация. Реализуйте инновационное приложение сценария в рамках цифровой трансформации с небольшим количеством кода или без него. Он может смягчить или даже решить противоречие между спросом и предложением, вызванное огромным рыночным спросом и традиционной производительностью разработки, и является продуктом тенденции снижения затрат и повышения эффективности в процессе цифровой трансформации.

JNPF использует новейшую основную структуру разделения спереди и сзади (SpringBoot + Mybatis-plus + Ant-Design + Vue3). Генератор кода имеет низкую зависимость, гибкие возможности расширения и может гибко реализовывать вторичную разработку.

Чтобы поддерживать разработку приложений с более высокими техническими требованиями, платформа с низким кодом корпоративного уровня, представленная JNPF, почти не отличается от традиционной разработки программного обеспечения от моделирования базы данных, построения веб-API до дизайна страницы. Для повторяющейся работы «дополнение, удаление, модификация и запрос», партнеры, которые еще не знакомы с low-code, могут попытаться разобраться в ней.

Адрес приложения: https://www.jnpfsoft.com/?csdn

С его помощью разработчики могут легко начать работу в процессе разработки и в полной мере использовать опыт, накопленный в традиционном режиме разработки. Поэтому low-code платформы очень помогают программистам.

рекомендация

отblog.csdn.net/Z__7Gk/article/details/132185003