недопустимая последовательность открытого разделителя текстового блока, отсутствующий терминатор строки
Скоро Java 13, поэтому я начал изучать его новые функции, одна из которых - текстовые блоки.
Я написал простую программу
public final class Example {
public static void main(String[] args) {
final String greeting = """Hello
It's me, Andrew!""";
System.out.println(greeting);
}
}
Я ожидал увидеть
Hello
It's me, Andrew!
Я получил сообщение об ошибке компиляции
недопустимая последовательность открытого разделителя текстового блока, отсутствующий терминатор строки
2 ответа
Контекст вашего текстового блока должен начинаться с новой строки.
public final class Example {
public static void main(String[] args) {
final String greeting = """
Hello
It's me, Andrew!""";
System.out.println(greeting);
}
}
отпечатки
Hello
It's me, Andrew!
Отрывок из JEP 355: Text Blocks (Preview):
Текстовый блок состоит из нуля или более символов содержимого, заключенных в открывающие и закрывающие разделители.
Открывающий разделитель представляет собой последовательность из трех символов двойных кавычек (
"""
), за которым следует ноль или более пробелов, за которыми следует признак конца строки. Содержимое начинается с первого символа после ограничителя строки открывающего разделителя.
Однако вам не обязательно ставить символ конца строки в конце вашего контента.
Закрывающий разделитель представляет собой последовательность из трех символов двойных кавычек. Содержимое заканчивается последним символом перед первой двойной кавычкой закрывающего разделителя.
final String greeting = """
Hello
It's me, Andrew!
""";
означало бы
Hello
It's me, Andrew!
<an empty line here>
Мне это кажется крайне непонятным, поэтому мне пришлось поделиться этим с сообществом.
Для протокола: обоснование решения не разрешать контент сразу после
"""
дается здесь
Причина этого заключается в том, что текстовые блоки в первую очередь предназначены для поддержки многострочных строк, и требование исходного указателя конца строки упрощает правила обработки отступов.