Gymterview
junior

Text Blocks (многострочные строки)

Text Blocks (финализированы в Java 15) — многострочные строковые литералы, сохраняющие форматирование. Начинаются с """ и переноса строки, отступ определяется позицией закрывающих """.

Пример: JSON, SQL, HTML
// До Java 15 — конкатенация
String json = "{\n" +
    "  \"name\": \"John\",\n" +
    "  \"age\": 30\n" +
    "}";

// Java 15+ — Text Block
String json = """
        {
          "name": "John",
          "age": 30
        }
        """;

// SQL
String sql = """
        SELECT u.name, u.email
        FROM users u
        WHERE u.status = 'ACTIVE'
        ORDER BY u.name
        """;

// HTML с форматированием
String html = """
        <html>
            <body>
                <h1>Hello, %s!</h1>
            </body>
        </html>
        """.formatted("World");

Управление отступами и escape-последовательности

Пример
// Отступ определяется позицией закрывающих """
String s1 = """
        Hello"""; // нет завершающего \n

String s2 = """
        Hello
        """; // есть завершающий \n

// Trailing whitespace удаляется; для сохранения — \s
String s3 = """
        line with trailing space\s
        """;

// \: line continuation (Java 14+, без переноса строки)
String longLine = """
        This is a very long line that \
        continues on the same line""";
// -> "This is a very long line that continues on the same line"

Частые ошибки

  • Неожиданные отступы — если закрывающие """ не выровнены, результат содержит лишние пробелы
  • Text Block в аннотациях — не поддерживается в @Query до Spring Data 3.x (нужна Java 17+)
  • \n внутри Text Block — Text Block сам добавляет переносы; явный \n удвоит перенос

Как используется в 2026

  • Стандарт для встроенных SQL, JSON, HTML, XML, YAML в Java-коде
  • Широко используется в @Query (Spring Data), тестах, конфигурации

На собеседовании: покажите, что понимаете правило определения отступа (по позиции закрывающих """), и знаете про \s для сохранения пробелов. Частая ошибка — путать поведение отступов.