似乎“ 原始字符串文字 ”即将出现在Java中。 JEP 326开始的(“原始字符串字面量”) 发行JDK-8196004 ,并宣布为“新JEP候选人” 3月2日的JEP和相关问题的人指出,“Java的仍然是一小群现代编程语言中的一个不为原始字符串提供语言级别的支持。” JEP及其相关问题特别引用了编程语言C, C ++ , C# (“ 逐字 ”), Dart , Go , Groovy , Haskell , JavaScript , Kotlin , Perl , PHP , Python , R , Ruby , Scala和Swift和“ Unix工具” bash , grep和sed “针对它们的定界符以及原始行和多行字符串的使用而进行了调查。”
JEP 326的“摘要”概述了建议的Java原始字符串文字:“原始字符串文字可以跨越源代码的多行,并且不能解释形式为\ n的转义序列,例如\ n或Unicode转义。 uXXXX。” 该JEP的“动机”部分添加了以下内容:“该JEP提出了一种新型的文字,即原始字符串文字 ,该文字保留了Java转义符和Java行终止符规范,以提供在许多情况下更易读和可维护的字符序列。而不是现有的传统字符串文字。” JEP 326 没有引入插值 ,实际上,在其“非目标”部分中将其排除在外:“原始字符串文字不直接支持字符串插值。 将来的JEP中可以考虑使用插值。”
Java 长期以来 一直 希望使用 多行String文字 。 JEP 326 (“原始字符串文字”)当前列出了几个示例,这些示例说明了原始字符串文字如何使在Java中更容易实现常见事物,并且这些示例用法包括多行字符串 ,操作系统文件路径 , 正则表达式 , 关系数据库SQL语句 ,以及polygot( Java + JavaScript )。
当前版本的JEP 326指出,将通过使用“ 反引号 ”字符( `
)来表示Java的原始字符串文字,该字符在JEP中也描述为\u0060
( Unicode“ Grave Accent” ),“ backquote ”,和“ 重音 ”。 我没有显示提议的语法的任何示例,因为JEP已经很好地列出了这些提议的原始字符串文字示例以及实现同一件事所需的传统Java代码的示例。 如果支持原始字符串文字,则可以轻松地将所需的当前语法与将来完成相同操作所需的语法进行比较。
对Java中的原始字符串文字的支持将为希望编写更具可读性的代码来支持JEP中描述的用例的Java开发人员提供便利。 它将为库甚至JDK代码提供类似的优势。 core-lib-devs邮件列表帖子“ Raw String Literal Library Support ” [ JDK-8196005 ]开始了“关于RSL库支持的讨论”。 (在这种情况下,“库支持”的上下文是JDK,RSL代表Raw String Literal。)。
在参考的“ 原始字符串文字库支持”一文中 , Jim Laskey提供了可能添加到String的方法列表,以利用原始字符串文字。 这些引发讨论的想法包括“线路支持”,“修剪”方法的增强,“保证金管理”和“逃生管理”。 其中一些由RSL促进,而其他一些由RSL必需。 引用的文章提供了每个示例的多个示例。
问题JDK-8198986指出“原始字符串文字需要一个新的JLS节。” 此问题链接到当前建议的部分 , 该部分将添加到所引用的Java语言规范中 。
尽管JEP 326仍然只是“候选”,并且与特定版本的Java无关,但有关它的最新工作以及邮件列表中最近的讨论(寻求与之相关的输入)使我对我们会看到多种形式保持谨慎的乐观态度。 Java字符串和其他原始字符串文字将在将来的版本中引入Java。
翻译自: https://www.javacodegeeks.com/2018/03/raw-string-literals-coming-to-java.html