在 Java 15 中,JEP 378: Text Blocks将三个实例方法添加到String
: stripIndent()
、translateEscapes()
和formatted(Object... args)
:
将添加以下方法以支持文本块;
String::stripIndent()
:用于从文本块内容中去除偶然的空白String::translateEscapes()
: 用于翻译转义序列String::formatted(Object... args)
: 简化文本块中的值替换
JEP 中解释了使用文本块时的用处formatted
,所以它的存在对我来说很有意义。
然而,其他两种方法对于使用文本块的开发人员来说似乎并不是特别有用。缩进剥离和转义翻译都是编译器针对文本块自动处理的事情。代码编写者永远不需要以编程方式从 Java 文本块中去除缩进,也不需要翻译文本块中的转义。此外,转义翻译自 Java 编译器最初发布以来一直存在,因此除了添加两个新的转义序列以支持文本块(\s
和\<line-terminator>
)之外,它甚至不是 Java 的新功能。
JEP 解释说这些方法可供开发人员访问,但不是做出此决定的原因。
重新缩进算法将在The Java Language Specification中成为规范。
String::stripIndent
开发人员将可以通过一个新的实例方法来访问它。
String::translateEscapes
开发人员将可以通过一个新的实例方法访问转义处理。
为什么这些方法String
与 Java 15 中的文本块一起添加到公共 API 中,而它们对于在编译器之外操作文本块(或以其他方式读取 Java 源代码的代码)没有用处?
我没有在 JEP 中看到它的解释,所以我想知道是否有任何官方文字或讨论来解释将这些方法包含在公共 API 中。