Прошла неделя с момента выпуска Java 14, и я собираюсь открыть коробку и вместе с друзьями взглянуть на новые функции. Мы, программисты, должны быть первопроходцами и любопытным менталитетом, иначе легко почивать на лаврах, и технология будет стагнировать. Давайте посмотрим, что нового в Java 14!
Красная линия - это то, что меня больше интересует, а остальные меня не очень привлекают, поэтому я ее пока проигнорирую.
01. Загрузите JDK 14
Если вы хотите открыть коробку, вам нужно сначала загрузить JDK 14, иначе что вы будете использовать, чтобы открыть коробку, верно? Есть 2 места для скачивания, коммерческая версия доступна на Oracle,jdk.java.netВерсию с открытым исходным кодом можно скачать здесь. Давайте выберем последнее.
В настоящее время я использую операционную систему Windows, поэтому я выбираю версию zip-пакета для Windows для загрузки и не забываю разархивировать его после завершения.
02, Intellij Idey Upgrade
IDEA необходимо сначала обновить до версии 2020.1 EAP, иначе она не сможет поддерживать новые функции в Java 14.
Адрес загрузки версии сообщества выглядит следующим образом:
[https://www.jetbrains.com/idea/nextversion/#section=windows](https://www.jetbrains.com/idea/nextversion/#section=windows)
При установке вы можете удалить предыдущую версию или оставить ее. После этого давайте создадим новый проект Java 14.
01. экземпляр
В порядке новых функций, давайте начнем с instanceof. Использование instanceof в старом стиле выглядит следующим образом:
public class OldInstanceOf {
public static void main(String[] args) {
Object str = "Java 14,真香";
if (str instanceof String) {
String s = (String)str;
System.out.println(s.length());
}
}
}
Вам нужно использовать instanceof, чтобы определить, является ли тип str строкой в условии if (первый шаг), а затем привести str к строковому типу в операторе if (второй шаг) и повторно объявить переменную для приведения. задание (третий шаг).
Три шага — это не так уж много, но я всегда чувствую, что синтаксис должен быть лучше.Нет, Java 14 думает об этом уровне.
public class NewInstanceOf {
public static void main(String[] args) {
Object str = "Java 14,真香";
if (str instanceof String s) {
System.out.println(s.length());
}
}
}
Вы можете напрямую добавить переменную при оценке типа условия if, поэтому нет необходимости принудительно объявлять новую переменную. Это особенно лаконично? Но instanceof для сопоставления с образцом находится в предварительном просмотре в Java 14 и не включен по умолчанию, поэтому этот код будет иметь странную ошибку компиляции (instanceof для сопоставления с образцом не поддерживается в Java 14).
Итак, как решить эту проблему? Вам необходимо вручную установить языковую версию в конфигурации проекта.
После настройки ошибки компиляции просто исчезли. Вывод программы следующий:
10
Хороший хороший, действительно ароматный. Хотите знать, что компилятор Java делает для нас за кулисами? Взгляните на декомпилированный байт-код, чтобы понять.
public class NewInstanceOf {
public NewInstanceOf() {
}
public static void main(String[] args) {
Object str = "Java 14,真香";
String s;
if (str instanceof String && (s = (String)str) == (String)str) {
System.out.println(s.length());
}
}
}
Перед оценкой условия if сначала объявляется переменная s, а затем принудительно используется условие if.s = (String)str)
, и определить, равны ли s и str. Это действительно хорошая функция, которая повышает производительность разработчиков, и мы очень надеемся, что эта функция будет реализована в следующей версии.
02. Рекорды
В предыдущей статье я говорил онеизменность класса, который определяется следующим образом:
public final class Writer {
private final String name;
private final int age;
public Writer(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
Затем для записей запись представляет неизменное состояние. Хотя это обеспечитequals()
,hashCode()
,toString()
, конструкторы и геттеры полей, но он не предназначен для замены изменяемых классов объектов (без сеттеров) и функций, предоставляемых Lombok.
Давайте заменим класс Writer выше на Records:
public record Writer(String name, int age) { }
Видите ли, вы можете сделать это с помощью одной строки кода. Суть в том, что он более функционален, чем предыдущий код.Давайте посмотрим на декомпилированный байт-код:
public final class Writer extends java.lang.Record {
private final java.lang.String name;
private final int age;
public Writer(java.lang.String name, int age) { /* compiled code */ }
public java.lang.String toString() { /* compiled code */ }
public final int hashCode() { /* compiled code */ }
public final boolean equals(java.lang.Object o) { /* compiled code */ }
public java.lang.String name() { /* compiled code */ }
public int age() { /* compiled code */ }
}
Класс окончательный, поле закрытое финальное, а конструктор имеет два параметра:toString()
,hashCode()
,equals()
Есть еще методы, а есть геттеры, но без префикса get. Но нет метода установки, а это значит, что Records действительно для неизменяемых объектов - идентифицируется. Итак, как использовать записи?
public class WriterDemo {
public static void main(String[] args) {
Writer writer = new Writer("沉默王二",18);
System.out.println("toString:" + writer);
System.out.println("hashCode:" + writer.hashCode());
System.out.println("name:" + writer.name());
System.out.println("age:" + writer.age());
Writer writer1 = new Writer("沉默王二", 18);
System.out.println("equals:" + (writer.equals(writer1)));
}
}
Вывод программы следующий:
toString:Writer[name=沉默王二, age=18]
hashCode:1130697218
name:沉默王二
age:18
equals:true
Неплохо, действительно ароматно, определять неизменяемые классы в будущем будет просто, очень надеюсь, что в следующей версии эту фичу поправят.
03. переключить выражение
Что касается выражения switch, я уже подробно объяснял его в предыдущей статье, нажмитепорталВы можете перепрыгнуть, чтобы посмотреть. Прошло две недели, и выражение переключателя наконец-то «невестка стала свекровью» превратилось в позитив, поздравляю.
Помню, когда эта статья была опубликована в Наггетс, меня разозлили всякие безмозглые люди, сказав: «Я думал, что у тебя есть какие-то навыки, но я не ожидал, что ты будешь использовать Java 13, но мы все еще застряли в Java». 8!» Это очевидно. Это самодовольный менталитет, очень нежелательный, и программисты не должны быть такими. Одна из самых простых истин заключается в том, что в то время Java 6 тоже была классикой, разве ее не заменила Java 8? Со временем Java 8 будет заменена более новыми, более эпохальными версиями — всегда есть прогресс.
О выключении выражения, здесь просто переместите вас, чтобы посмотреть на пример:
public class SwitchDemo {
enum PlayerTypes {
TENNIS,
FOOTBALL,
BASKETBALL,
PINGPANG,
UNKNOWN
}
public static void main(String[] args) {
System.out.println(createPlayer(PlayerTypes.BASKETBALL));
}
private static String createPlayer(PlayerTypes playerType) {
return switch (playerType) {
case TENNIS -> "网球运动员费德勒";
case FOOTBALL -> "足球运动员C罗";
case BASKETBALL -> "篮球运动员詹姆斯";
case PINGPANG -> "乒乓球运动员马龙";
case UNKNOWN -> throw new IllegalArgumentException("未知");
};
}
}
за исключением того, что вы можете использовать->
Новый синтаксис , также можно использовать в качестве возвращаемого результата, что действительно приятно.
04. Текстовые блоки
До появления Text Blocks, если нам нужно было конкатенировать многострочные строки, нам требовалось много английских двойных кавычек и плюсиков, которые выглядели как старушинские бинты, что было очень неприлично. Если вам случится конкатенировать некоторый текст в формате HTML (как это делает собственный SQL), вам также нужно будет использовать пробелы для набора текста и экранирования новой строки.\n
Утомительная работа по переносу строк — катастрофа для разработчика.
public class OldTextBlock {
public static void main(String[] args) {
String html = "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
System.out.println(html);
}
}
Java 14 совершенно другой:
public class NewTextBlock {
public static void main(String[] args) {
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
System.out.println(html);
}
}
Дополнительные кавычки, плюс, линия побега, все прошло. Несреднее до и после трех кавычек реализован. Я могу сказать только аромат, это действительно ароматно!
05. Спасибо
Что ж, мои дорогие читатели и друзья, вышеизложенное — это все содержание этой статьи, а лучших программистов можно увидеть здесь.Оригинальность не так проста, не просите пустой билет, пожалуйста, поставьте лайк этой статье, это будет сильнейшей мотивацией для меня писать больше качественных статей.
Если вы считаете, что статья немного полезна для вас, пожалуйста, выполните поиск по запросу "Тихий король 2"Прочтите это в первый раз, ответьте [666】1024] Я также тщательно подготовил для вас обучающие видео высокой четкости 500G (которые были разделены на категории), а также копии интервью, организованных техническими экспертами большой фабрики.Исходный код этой статьи был включен вОблако кода,портал~