Привыкайте писать вместе! Это 9-й день моего участия в «Новом ежедневном плане Nuggets · Апрельское задание по обновлению», нажмите, чтобы просмотреть подробности мероприятия .
Java8 был выпущен 18 марта 2014 г., а по состоянию на 6 апреля 2022 г. последним выпуском является Java18. В настоящее время поддерживаются версии 17, 11 и 8 с долгосрочной поддержкой (LTS). В этой статье вы ознакомитесь с функциями каждой версии, начиная с Java 8. Садитесь на скамейку и вперед! Если вы хотите прочитать предыдущую статью, нажмите здесь для интервью и анти-убийства | Пожалуйста, расскажите о новых функциях, представленных в Java8-18 (3)
Что нового в Java 13
Текстовые блоки
Текстовый блок минимизирует синтаксис Java, необходимый для представления многострочных строк, которые можно использовать вместо любой строки, обычно заключенной в двойные кавычки. Перед текстовым блоком, если бы нам нужно было напечатать многострочную строку, нам пришлось бы использовать разделители, конкатенацию и т. д.
Например, следующий код выдаст полную строку в одну строку.
System.out.print("Hey There "
+ "What's up?? "
+ "How was your vacation?? "
+ ";)");
复制代码
выход:
Hey There What's up?? How was your vacation?? ;)
复制代码
Чтобы напечатать их на следующей строке, мы должны изменить приведенный выше код на приведенный ниже код:
System.out.print("Hey There \n"
+ "What's up?? \n"
+ "How was your vacation?? \n"
+ ";)");
复制代码
Используя текстовые блоки, мы можем переписать приведенный выше код в код, приведенный ниже,
System.out.print("""
Hey There
What's up??
How was your vacation??
;)
""");
复制代码
Текстовые блоки также можно использовать вместо стандартных строк. Например, две показанные ниже строки имеют одинаковое значение:
//Text Block
printMsg("""
Print This!! """);
// String in Double Quotes
printMsg("Print this!");
复制代码
Выражения переключения (JEP 354)
Впервые мы увидели Switch Expressions в JDK 12. Switch Expressions версии 13 основываются на предыдущей версии, добавляя новый оператор yield.
Используя yield, теперь мы можем эффективно возвращать значения из выражений switch:
@Test
@SuppressWarnings("preview")
public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {
var me = 4;
var operation = "squareMe";
var result = switch (operation) {
case "doubleMe" -> {
yield me * 2;
}
case "squareMe" -> {
yield me * me;
}
default -> me;
};
assertEquals(16, result);
}
复制代码
Как мы видим, режим стратегии теперь легко реализуется с помощью нового переключателя.
Текстовые блоки
Текстовые блоки многострочных строк, таких как встроенные JSON, XML, HTML и т. д.
Чтобы встроить JSON в наш код, мы объявляем его как строковый литерал:
String JSON_STRING
= "{\r\n" + ""name" : "namestr",\r\n" + ""website" : "https://www.%s.com/"\r\n" + "}";
复制代码
Теперь давайте напишем тот же JSON, используя текстовые блоки String:
String TEXT_BLOCK_JSON = """
{
"name" : "namestr",
"website" : "https://www.%s.com/"
}
""";
复制代码
Очевидно, нет необходимости экранировать двойные кавычки или добавлять возврат каретки. Благодаря использованию текстовых блоков встроенный JSON легче писать, читать и поддерживать.
Кроме того, доступны все функции String:
@Test
public void whenTextBlocks_thenStringOperationsWorkSame() {
assertThat(TEXT_BLOCK_JSON.contains("namestr")).isTrue();
assertThat(TEXT_BLOCK_JSON.indexOf("www")).isGreaterThan(0);
assertThat(TEXT_BLOCK_JSON.length()).isGreaterThan(0);
}
复制代码
Кроме того, в java.lang.String теперь есть три новых метода для управления блоками текста:
- stripIndent() - имитирует удаление компилятором случайных пробелов
- translateEscapes() - переводит escape-последовательности типа "t" в "t"
- Formatted() — работает так же, как String::::format, но для блоков текста
Давайте кратко рассмотрим пример форматирования String::::
assertThat(TEXT_BLOCK_JSON.formatted("baeldung").contains("www.baeldung.com")).isTrue();
assertThat(String.format(JSON_STRING,"baeldung").contains("www.baeldung.com")).isTrue();
复制代码
Конечно, есть и другие новые функции, включая, помимо прочего:
- Динамические архивы CDS (JEP 350)
- ZGC: отменить неиспользуемую память (JEP 351)
- Реализация устаревшего API сокетов (JEP 353)
Продолжение следует, продолжим рассказывать о новых возможностях каждой версии, так что следите за обновлениями!