jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史
jdk8 string::
最近有人提議從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中刪除。 JDK 12中已添加String :: transform方法,本文的其余部分將詳細介紹當前在JDK 12中實現的String::transform ,并討論為何其已引起爭議的簡短歷史暗示它可能成為潛在候選人與原始字符串文字一起刪除。
自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的方式,存在一些困惑和驚nation,但是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
jdk8 string::
總結
以上是生活随笔為你收集整理的jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 出马仙是什么意思(萨满出马仙是什么是真的
- 下一篇: jdbc如何写csv文件_Java:将J