Интервью, чтобы убить | Пожалуйста, расскажите о новых функциях, представленных в Java8-18 (4)

Привыкайте писать вместе! Это 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)

Продолжение следует, продолжим рассказывать о новых возможностях каждой версии, так что следите за обновлениями!

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

отjuejin.im/post/7084371995835498526