Что такое текстовый блок и как в нём работают отступы?
- Что такое текстовый блок ("""…""", Java 15)?
Многострочный литерал в тройных кавычках: JSON, SQL, HTML без экранирования и конкатенации. Результат — обычная String. Общий отступ (по самой левой строке и закрывающим кавычкам) срезается, хвостовые пробелы удаляются.
- Сдвиг закрывающих кавычек влево добавляет отступ в результат
- \ в конце строки — склеить строки без перевода
- \s — сохранить пробел
А ещё Интерполяции нет: formatted() или String.format
Подробно
Правило отступа стоит понимать точно: компилятор находит минимальный отступ среди непустых строк и позиции закрывающих кавычек, после чего срезает его — поэтому сдвиг закрывающих кавычек влево добавляет отступ в результат. Хвостовые пробелы удаляются всегда, и если они нужны, их защищают через \s. Интерполяции в языке нет, поэтому значения подставляют через formatted() или String.format. Текстовые блоки удобны для SQL, JSON и HTML в тестах, но важно помнить, что это по-прежнему обычная строка: никакого экранирования для SQL они не делают, и параметризованные запросы никто не отменял.
Пример
String sql = """
SELECT id, name
FROM users
WHERE status = '%s'
""".formatted(status);Что хотят услышать
- Назначение.
- Правило отступов.
- Отсутствие интерполяции.
Частые ошибки
- Ожидать интерполяции переменных внутри блока.
- Собирать SQL текстовым блоком с подстановкой значений вместо параметров.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Общий отступ удаляется, его задаёт и положение закрывающих кавычек
- ✗Внутри текстового блока подставляются значения переменных, как в шаблонных строках других языков
- ✓Обратный слэш в конце строки убирает перевод строки
- ✓Последовательность \s сохраняет пробел, который иначе был бы удалён
Что спросят дальше
- Как положение закрывающих кавычек меняет результат?
- Чем formatted() удобнее String.format в этом контексте?
- Что такое incidental whitespace?
- Как блок ведёт себя с завершающим переводом строки?
Разбор темы
- Современный синтаксис: var, текстовые блоки, switch
Локальный вывод типа var, многострочные текстовые блоки, switch-выражения и другие удобства новых версий.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.