JDK 12的String :: transform方法的简要但复杂的历史
最近有人建議從JDK 12中刪除Java預覽功能Raw String Literals ( JEP 326 ), 現在正式宣布將刪除預覽功能 ( Java SE 12 [JSR 386] 25版將其刪除 )。 JDK String類中已經添加了幾種方法來支持此功能。 即使在刪除原始字符串文字預覽功能之后,在JDK 12之前的JDK版本中添加的那些方法(例如String :: lines )仍可能保持可用。 但是,已經決定應該將JDK 12中添加到String一種方法( String::align ) 從JDK 12中刪除,作為刪除原始字符串文字的一部分。 方法String :: transform已添加到JDK 12中 ,本文的其余部分詳細介紹了String::transform (目前在JDK 12中實現),并討論了為什么其已引起爭議的簡短歷史暗示它可能是潛在的候選者與原始字符串文字一起刪除。
自Build 22 ( Build 24 [ 2018年12月15日 ]是本文撰寫時的最新可用版本)以來,當前的String::transform實現已在JDK 12 Early Access Build中提供,并通過JDK-8203442引入(“ String :: transform” )。
關于將這種方法添加到JDK的討論很多。 以下項目符號概述了關鍵的討論要點。
- 吉姆·拉斯基(Jim Laskey)寫道 , String::transform的“起源目標”是“為那些不滿意String::align()開發人員提供自定義對齊方法”
- 自從String::transform上的帖子以來, 已將 String::align 添加到JDK 12中, 然后從中刪除 。
- 其他消息進一步描述了String::transform的動機,意圖和好處:
- RémiForax寫道 :“……能夠從左到右流利地編寫代碼真是太好了……”
- 吉姆·拉斯基(Jim Laskey)寫道 :“ String :: transform旨在以最通用的字符串形式促進對原始字符串文字的自定義操作(對齊)。”
- JDK-8203442的“描述”指出,“ String :: transform實例方法允許將lambda函數應用到字符串。”
- JDK-8203703提供了一些示例,以說明與靜態方法相比,使用String :: transform可以“……更清楚地辨別步驟”,在靜態方法中,“閱讀器被迫從內而外地解釋表達式的各個部分”。
- String::transform最初返回String ,但是后來被更改為返回Object , 吉姆·拉斯基(Jim Laskey)撰寫了有關該更改的文章 ,“當其他類型的類型也可能相關時,'transform'變成通用的。” 他總結說:“我可能會回到僅僅支持String 。”
- 提出以下一些名稱(按字母順序列出)時, String::transform的命名一直具有挑戰性 :
- “ 申請 ”
- “ applyMutation ”(由AWS開發工具包使用 ,但并非所有人都喜歡 )
- “ asInputTo “
- “ 連鎖 ”
- “ 地圖 ”( 暫時命名為,但存在一些顧慮 )
- “ 過程 ”
- “ 與 ”
- RémiForax寫道 :“ [需要更多的變體( transformToInt , transformToLong , transformToDouble )才有用。”
- Brian Goetz描述了為什么當前計劃是通過String::transform方法而不是諸如|>類的運算符來實現此功能的。
- 斯圖爾特·馬克斯(Stuart Marks)寫道 :“這個特殊的決定[ String::transform ]為在其他類上執行類似操作的方法使用名稱'transform'開創了先例”,并引用了JDK-8140283和JDK-8214753 :
- JDK-8140283提議為Stream和Optional添加“ chain ”方法,以便在使用對Stream或Optional起作用并返回某些內容的方法時,“緩解”管線級線性流的“破壞”。本身是“可鏈接的”)。
- JDK-8214753建議添加“ Optional::transform ”,以允許“對Optional進行任意操作”。
- 關于將String::transform添加到OpenJDK 12的方式,存在一些困惑和驚ster,但是Stuart Marks的消息總結了導致添加此方法的事件。
- Marks的消息狀態中有一個特別有趣的句子(我已經強調了一點 ):“盡管這個API點是獨立存在的 ,但這確實是Jim的RSL工作的一部分,其中包括對String的一些API附加功能,這可能會產生重大影響關于如何在Java代碼中使用String文字。”
- Tomasz Linkowski指出 , String::transform (以及添加到Stream任何類似方法)很可能會在某些情況下使用,而在某些情況下,無需新方法便可以更輕松地完成相同的事情。 他提供的可能濫用String::transform的示例是“ string.transform(String::toLowerCase) ”和“ stream.chain(s->s.map(mapper)) ”。
兩個在線示例演示了String::transform如何在最常見的用例中使用:
- JDK-8203703 (“ String :: transform”)提供了一個“解決方案”示例,該示例演示了String::transform如何通過允許從左到右(而不是從左到右)讀取作用在String的操作來提高代碼的可讀性。閱讀“從內而外”。
- 甲芯庫-dev郵件列表上的消息提供了使用的一個例子String::transform到一個轉換String成比其他的類的實例String 。
Stephen Colebourne提出了同樣的問題,我想知道當我從JDK 12中刪除原始字符串文字時:“考慮到原始字符串的刪除及其有爭議的性質, String::transform將被刪除?” 盡管我沒有看到關于String::transform是否將保留在JDK 12中的任何權威性和權威性,但有三點證據使我認為它會繼續存在。
String::transform已經存在了很短的時間( 不到一年 ),但是已經有很長的歷史了。 該方法當前在JDK 12中可用(自Early Access Build 22起),我懷疑盡管從JDK 12中刪除了原始字符串文字,但它仍將是String的API的一部分。
翻譯自: https://www.javacodegeeks.com/2018/12/complicated-history-jdk-12s-string.html
總結
以上是生活随笔為你收集整理的JDK 12的String :: transform方法的简要但复杂的历史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 尼尔安卓版(尼尔安卓)
- 下一篇: 参数化测试 junit_使用JUnitP