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 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上的帖子以来, 已将 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写道 :“ [需要更多的变体( transformToInttransformToLongtransformToDouble )才有用。”
  • Brian Goetz描述了为什么当前计划是通过String::transform方法而不是诸如|>类的运算符来实现此功能的。
  • 斯图尔特·马克斯(Stuart Marks)写道 :“这个特殊的决定[ String::transform ]为在其他类上执行类似操作的方法使用名称'transform'开创了先例”,并引用JDK-8140283和JDK-8214753 :
      • JDK-8140283提议为Stream和Optional添加“ 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::

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册界面的实现案例视频(前端开发)

视频1:https://live.csdn.net/v/182184 视频2:https://live.csdn.net/v/182185 视频3:https://live.csdn.net/v/182186 视频4:https://live.csdn.net/v/182200

jdbc如何写csv文件_Java:将JDBC结果集作为CSV流化

jdbc如何写csv文件在上一篇文章中 ,我展示了如何将java.sql.ResultSet转换为JSON并将其流回调用方。 这篇文章是关于以CSV格式流式传输。 流式传输使您可以一点一点地传输数据,而不必将所有数据都加载到服务器的内存中。 例如,考虑以下Resul…

使用Bootstrap开发网站首页

视频1:https://live.csdn.net/v/182207 视频2:https://live.csdn.net/v/182208 视频3:https://live.csdn.net/v/182209

在java中3.14156d表示_2006年9月计算机等级考试二级Java笔试真题

一、选择题(每小题2分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)下列选项中不符合良好程序设计风格的是_____。A)源程序要文档化B)数据说明的次序…

apigee 安装_APIGEE:用于API代理的CI / CD管道

apigee 安装在本文中,我们将看到如何为APIGEE API代理创建CI / CD管道。 我已经参考了APIGEE社区上同一主题的几篇文章。 这些给了一些关于如何为API代理设置CI / CD管道的想法。 这是我用来设置CI / CD的工具。 詹金斯 节点 蜂胶 新人 APIGEE管理API 确保已创…

超链接标签/<a>标签

保留 <a> 标签的点击功能&#xff0c;但是点击不需要跳转&#xff0c;也就是取消 href 属性的功能&#xff0c;可以这样做&#xff1a; <a href"javascript:void(0);">test2</a>href 属性不能去掉&#xff0c;否则看不到链接样式。

php model层怎么写逻辑,目前用php框架的话,大家会把逻辑写到model中吗?

目前用php框架的话&#xff0c;大家会把逻辑写到model中吗&#xff1f;还是model只做数据的添加删除 修改操作&#xff1f;如果说是简单 mvc框架 你们把逻辑写在哪里&#xff1f;controller&#xff1f;还是说自己弄了个逻辑层&#xff1f;回复内容&#xff1a;目前用php框架的…

gradle项目 构建_使用Gradle构建Monorepo项目

gradle项目 构建根据Wikipedia的说法 &#xff0c; monorepo是一种软件开发策略&#xff0c;其中许多项目存储在同一资源库中。 这种策略可以快速检测到因依赖关系的更改而导致的潜在问题和破坏&#xff0c;并且已被许多使用大型代码库的组织采用&#xff0c;例如Google&#x…

jsoup爬虫教程技巧_Jsoup V的幕后秘密:优化的技巧和窍门

jsoup爬虫教程技巧我们已经把事情做好了&#xff0c;现在是时候加快工作速度了。 我们会牢记Donald Knuth的警告&#xff1a;“大约97&#xff05;的时间我们应该忘记效率低下&#xff1a;过早的优化是万恶之源”。 根据Jonathan Hedley的介绍&#xff0c;他使用YourKit Java …

DOM(document object model),文档对象模型

DOM 将标记语言文档一次性加载进内存中&#xff0c;在内存中形成一棵 DOM 数。

php 获取请求设备,php – 如何获取设备令牌

我有一个iOS应用程序,我想集成推送通知.我见过tutorial on youtube,一切都还可以,但最近我使用的是开发证书(用于测试 – 不用于AppStore),我的服务器上有PHP脚本.在这个文件中存储了deviceToken,它有我的iPhone并且用php变量$deviceToken编写.但是现在,当我想在AppStore中使用…

java项目使用junit_在Java 8之前的项目中使用JUnit 5

java项目使用junit这篇文章演示了如何在Java 8之前的项目中使用JUnit 5&#xff0c;并解释了为什么它是一个好主意。 JUnit 5至少需要Java 8作为运行时环境&#xff0c;因此您想将整个项目更新为Java8。但是有时由于某些原因&#xff0c;您无法立即将项目更新为Java8。例如&am…

set cache php,TP5之Cache的原理及使用

在当今大流量的互联网之中&#xff0c;Cache的重要性不言而喻。ThinkPhp5作为国内主流框架&#xff0c;提供了强大的Cache功能。让我们跟随本文&#xff0c;来剖析TP5 Cache的原理及使用。为什么需要Cache(缓存)?假设现在有一个小说网,有非常多的读者,有一篇新的章节更新了,那…

IntelliJ IDEA for Mac 项目窗口详解(Project Windows)

Show Members&#xff1a;显示成员&#xff0c;打勾&#xff0c;类的成员&#xff0c;例如&#xff1a;方法、字段等会显示出来&#xff0c;如下图所示&#xff1a; Show Excluded Files&#xff1a;显示排除的文件 Show Visibility Icons&#xff1a;显示可见性图标&#xff…

jdk9与jdk11哪个好_JDK 9、10和11中的安全性增强

jdk9与jdk11哪个好缩短JDK发布周期的原因之一是有可能推出更快的安全错误修复和增强功能。 在本文中&#xff0c;我们将简要回顾一下最新JDK版本中引入的主要安全增强功能。 由于这些增强功能中的大多数与TLS相关&#xff0c;因此必须了解TLS握手过程&#xff0c;如下图所示&am…

对一个java源文件进行正确编译,给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确...

给定如下一个Java源文件Child.java&#xff0c;编译并运行Child.java&#xff0c;以下结果正确答&#xff1a;编译错误&#xff1a;没有找到构造器 Parent1()中国大学MOOC: 图像分割是基于灰度值的两个基本特性()答&#xff1a;相似性 连续性合同是平等主体之间的 法律行为。答…

多云平台_多云系统的授权

多云平台这是我目前正在使用的项目设计&#xff0c;用于消耗SPIFFE&#xff08; 受所有人保护的安全生产身份框架&#xff08; &#xff09;的信任和身份识别&#xff0c;在WSO2的Prabath Siriwardena先生的启发下&#xff0c;在Moratuwa大学的Gihan Dias教授的指导下&#xf…

XML的学习

文章目录XML 简介XML 语法XML 组成部分XML 约束DTD名称解释引用内部的 DTD引用外部的 DTDSchema语法格式详解命名空间前缀的意义XML 解析解析 XML 的方式&#xff08;思想&#xff09;解析器JSOUP 的使用JSOUP 入门快捷查询Jsoup 选择器查询XPathXML 简介 XML&#xff0c;Exte…

php 日期多余小时,在PHP中添加小时到日期时间

DateTime是PHP中的一个很棒的功能$string 1/1/2016 11.00PM;$date new DateTime($string);$interval new DateInterval(PT6H);$date->add($interval);// Now add another 6 hours while we are between 12:00 AM and 6:00 AMwhile($date->format(G) > 0 &&…