jdk8 string::_JDK 12的String :: transform方法的简要但复杂的历史

jdk8 string::

最近有人提议从JDK 12中删除Java预览功能Raw String LiteralsJEP 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 22Build 24 [ 2018年12月15日 ]是本文撰写时的最新可用版本)以来,当前的String::transform实现已在JDK 12 Early Access Build中提供,并通过JDK-8203442引入(“ String :: transform” )。

关于将这种方法添加到JDK的讨论很多。 以下项目符号概述了关键的讨论要点。

  • 吉姆·拉斯基(Jim Laskey)写道String::transform的“起源目标”是“为那些不满意String::align()开发人员提供自定义对齐方法”
  • 其他消息进一步描述了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命名一直具有挑战性
  • RémiForax写道 :“ [需要更多的变体( transformToInttransformToLongtransformToDouble )才有用。”
  • Brian Goetz描述了为什么当前计划是通过String::transform方法而不是诸如|>类的运算符来实现此功能的。
  • 斯图尔特·马克斯(Stuart Marks)写道 :“这个特殊的决定[ String::transform ]为在其他类上执行类似操作的方法使用名称'transform'开创了先例”,并引用JDK-8140283JDK-8214753
      • JDK-8140283提议为StreamOptional添加“ chain ”方法,以便在使用作用于StreamOptional并返回返回值的方法时,“缓解”流水线级线性流的“破坏”。本身是“可链接的”)。
      • 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中的任何权威性和权威性,但有三点证据使我认为它会继续存在。

  1. 我还没有看到有什么说要删除String::transform ,它已经在JDK 12中从Early Access Build 22开始。 写了一些问题来删除与原始字符串文字相关的编译器支持 ,甚至删除另一个String方法String::align ),但是我不知道为String::transform写的类似问题。
  2. 有人说过,虽然String::transform是作为原始字符串文字工作的一部分而添加的,但也有人说String::transform “独立的”。
  3. 我之前引用的有关如何使用此方法的两个示例不依赖或不需要原始字符串文字。 换句话说,无论是否存在原始字符串文字,都可以使用该方法。

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::

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值