拜托,Java。 最终是否支持多行字符串文字
我了解Java語(yǔ)言的思想很難以向后兼容的方式進(jìn)行維護(hù)。 我知道JDK API(例如集合)的想法很難打破。 是。
我不明白為什么Java 仍然沒(méi)有多行字符串文字。
您多久編寫一次這樣的JDBC代碼(或您想嵌入Java的任何其他外部語(yǔ)言或標(biāo)記,例如JSON或XML)?
try (PreparedStatement s = connection.prepareStatement("SELECT * "+ "FROM my_table "+ "WHERE a = b " )) {... }怎么了
- 語(yǔ)法正確 ,即不要忘記在每行的末尾添加空格
- 宿主語(yǔ)言的樣式與外部語(yǔ)言的樣式 ,請(qǐng)確保上面的代碼看起來(lái)用Java格式看起來(lái)“不錯(cuò)”,但對(duì)于使用方服務(wù)器端則沒(méi)有格式化
- SQL注入 ,我們不是教我們的下輩不要在SQL中執(zhí)行這種字符串連接,以防止SQL注入嗎? 當(dāng)然,以上內(nèi)容仍然是安全的,但是是什么原因使經(jīng)驗(yàn)不足的維護(hù)者無(wú)法嵌入用戶輸入呢?
今天,我正在使用Xtend編寫一些代碼, Xtend是一種非常有趣的語(yǔ)言,可以編譯為Java源代碼。 Xtend在模板化方面非常有用(例如,用于生成jOOQ的Record1 – Record22 API)。 我注意到多行字符串的另一個(gè)非常好的功能:
無(wú)需逃脫!
Xtend中的多行字符串以三撇號(hào)終止。 例如
// Xtend val regex = '''import java\.lang\.AutoCloseable;'''是的,以上是有效的Java正則表達(dá)式。 當(dāng)匹配AutoCloseable類型的導(dǎo)入時(shí),我在轉(zhuǎn)義點(diǎn)。 我不必在普通字符串中執(zhí)行繁瑣的兩次轉(zhuǎn)義操作,就可以告訴Java編譯器反斜杠實(shí)際上是反斜杠,而不是Java轉(zhuǎn)換了以下字符:
// Java String regex = "import java\\.lang\\.AutoCloseable;";所以……轉(zhuǎn)換為我們?cè)嫉腟QL示例,我真的很想寫這個(gè):
try (PreparedStatement s = connection.prepareStatement('''SELECT *FROM my_tableWHERE a = b''' )) {... }具有很大的優(yōu)勢(shì):字符串插值(甚至PHP都有)!
String tableName = "my_table"; int b = 1; try (PreparedStatement s = connection.prepareStatement('''SELECT *FROM ${tableName}WHERE a = $''' )) {... }小但非常有效的改進(jìn)
這將是非常小的(就語(yǔ)言復(fù)雜性預(yù)算而言:只是一個(gè)新的令牌),但對(duì)于將Java嵌入外部語(yǔ)言(SQL,XML,XPath,Regex等)的所有人來(lái)說(shuō),這都是非常有效的改進(jìn)。 我們做了很多。 我們討厭它。
它不必像Xtend的多行字符串文字那樣強(qiáng)大( 它確實(shí)與空白管理一起使用以格式化和模板化表達(dá)式 )。 但這將是一個(gè)開始。
請(qǐng)把它作為新年的決議! :)
翻譯自: https://www.javacodegeeks.com/2016/01/please-java-finally-support-multiline-string-literals.html
總結(jié)
以上是生活随笔為你收集整理的拜托,Java。 最终是否支持多行字符串文字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 消杀类产品备案查询(消杀类产品备案)
- 下一篇: 发现大量Java原语集合处理