自己怎样做网站网页设计品牌

news/2025/10/9 5:02:22/文章来源:
自己怎样做网站,网页设计品牌,建设网站群,1 建设网站目的Java™8是第一个支持类型推断的 Java 版本#xff0c;而且它仅对 lambda 表达式支持此功能。在 lambda表达式中使用类型推断具有强大的作用#xff0c;它将帮助您做好准备以应对未来的 Java版本#xff0c;在今后的版本中还会将类型推断用于变量等更多可能。这里的诀窍在于恰…Java™8是第一个支持类型推断的 Java 版本而且它仅对 lambda 表达式支持此功能。在 lambda表达式中使用类型推断具有强大的作用它将帮助您做好准备以应对未来的 Java版本在今后的版本中还会将类型推断用于变量等更多可能。这里的诀窍在于恰当地命名参数相信 Java 编译器会推断出剩余的信息。大多数时候编译器完全能够推断类型。在它无法推断出来的时候就会报错。了解 lambda 表达式中的类型推断的工作原理至少查看一个无法推断类型的示例。即使如此也有解决办法。显式类型和冗余假设您询问某个人“您叫什么名字”他会回答“我名叫约翰”。这种情况经常发生但简单地说“约翰”会更高效。您需要的只是一个名称所以该句子的剩余部分都是多余的。不幸的是我们总是在代码中做这类多余的事情。Java 开发人员可以使用 forEach 迭代并输出某个范围内的每个值的双倍值如下所示IntStream.rangeClosed(1, 5).forEach((int number) - System.out.println(number * 2));rangeClosed 方法生成一个从 1 到 5 的 int 值流。lambda 表达式的唯一职责就是接收一个名为 number 的 int 参数使用PrintStream 的 println 方法输出该值的双倍值。从语法上讲该 lambda 表达式没有错但类型细节有些冗余。Java 8 中的类型推断当您从某个数字范围中提取一个值时编译器知道该值的类型为 int。不需要在代码中显式声明该值尽管这是目前为止的约定。在 Java 8 中我们可以丢弃 lambda 表达式中的类型如下所示IntStream.rangeClosed(1, 5).forEach((number) - System.out.println(number * 2));由于Java 是静态类型语言它需要在编译时知道所有对象和变量的类型。在 lambda 表达式的参数列表中省略类型并不会让 Java更接近动态类型语言。但是添加适当的类型推断功能会让 Java 更接近其他静态类型语言比如 Scala 或 Haskell。信任编译器如果您在 lambda 表达式的一个参数中省略类型Java 需要通过上下文细节来推断该类型。返回到上一个示例当我们在 IntStream 上调用 forEach 时编译器会查找该方法来确定它采用的参数。IntStream 的 forEach 方法期望使用函数接口 IntConsumer该接口的抽象方法 accept 采用了一个 int 类型的参数并返回 void。如果在参数列表中指定了该类型编译器将会确认该类型符合预期。如果省略该类型编译器会推断出预期的类型 —在本例中为 int。无论是您提供类型还是编译器推断出该类型Java 都会在编译时知道 lambda 表达式参数的类型。要测试这种情况可以在 lambda 表达式中引入一个错误同时省略参数的类型IntStream.rangeClosed(1, 5).forEach((number) - System.out.println(number.length() * 2));编译此代码时Java 编译器会返回以下错误Sample.java:7: error: int cannot be dereferenced.forEach((number) - System.out.println(number.length() * 2));^1 error编译器知道名为 number 的参数的类型。它报错是因为它无法使用点运算符解除对某个 int 类型的变量的引用。可以对对象执行此操作但不能对 int 变量这么做。类型推断的好处在 lambda 表达式中省略类型有两个主要好处键入的内容更少。无需输入类型信息因为编译器自己能轻松确定该类型。代码杂质更少 —(number) 比 (int number) 简单得多。此外一般来讲如果我们仅有一个参数省略类型意味着也可以省略 ()如下所示IntStream.rangeClosed(1, 5).forEach(number - System.out.println(number * 2));请注意您将需要为采用多个参数的 lambda 表达式添加括号。类型推断和可读性lambda 表达式中的类型推断违背了 Java 中的常规做法在常规做法中会指定每个变量和参数的类型。尽管一些开发人员辩称 Java 指定类型的约定让代码变得更可读、更容易理解但我认为这种偏好反映出一种习惯而不是必要性。以一个包含一系列转换的函数管道为例List result cars.stream().map((Car c) - c.getRegistration()).map((String s) - DMVRecords.getOwner(s)).map((Person o) - o.getName()).map((String s) - s.toUpperCase()).collect(toList());在这里我们首先提供了一组 Car 实例和相关的注册信息。我们获取每辆车的车主和车主姓名并将该姓名转换为大写。最后将结果放入一个列表中。这段代码中的每个 lambda 表达式都为其参数指定了一个类型但我们为参数使用了单字母变量名。这在 Java 中很常见。但这种做法不合适因为它丢弃了特定于域的上下文。我们可以做得比这更好。让我们看看使用更强大的参数名重写代码后发生的情况List result cars.stream().map((Car car) - car.getRegistration()).map((String registration) - DMVRecords.getOwner(registration)).map((Person owner) - owner.getName()).map((String name) - name.toUpperCase()).collect(toList());这些参数名包含了特定于域的信息。我们没有使用 s 来表示 String而是指定了特定于域的细节比如 registration 和name。类似地我们没有使用 p 或 o而是使用 owner 表明 Person 不只是一个人还是这辆车的车主。这个示例中的每个 lambda 表达式都比它所取代的表达式更好。在读取 lambda 表达式(例如 (Person owner) - owner.getName())时我们知道我们获得了车主的姓名而不只是随便某个人的姓名。命名参数Scala 和 TypeScript 等一些语言更加重视参数名而不是类型。在 Scala 中我们在定义类型之前定义参数例如通过编写def getOwner(registration: String)而不是def getOwner(String registration)类型和参数名都很有用但在 Scala 中参数名更重要一些。我们用 Java 编写 lambda 表达式时也可以考虑这一想法。请注意我们在 Java 中的车辆注册示例中丢弃类型细节和括号时发生的情况List result cars.stream().map(car - car.getRegistration()).map(registration - DMVRecords.getOwner(registration)).map(owner - owner.getName()).map(name - name.toUpperCase()).collect(toList());因为我们添加了描述性的参数名所以我们没有丢失太多上下文而且显式类型(现在是冗余内容)已悄然消失。结果是我们获得了更干净、更朴实的代码。类型推断的局限性尽管使用类型推断可以提高效率和可读性但这种技术并不适用于所有场合。在某些情况下完全无法使用类型推断。幸运的是您可以依靠 Java 编译器来获知何时出现这种情况。我们首先看一个测试编译器并获得成功的示例然后看一个测试失败的示例。最重要的是在两种情况下都能够相信编译器会按期望方式工作。扩展类型推断在我们的第一个示例中假设我们想创建一个 Comparator 来比较 Car 实例。我们首先需要一个 Car 类class Car {public String getRegistration() { return null; }}接下来我们将创建一个 Comparator以便基于 Car 实例的注册信息对它们进行比较public static Comparator createComparator() {return comparing((Car car) - car.getRegistration());}用作 comparing 方法的参数的 lambda 表达式在其参数列表中包含了类型信息。我们知道 Java 编译器非常擅长类型推断那么让我们看看在省略参数类型的情况下会发生什么如下所示public static Comparator createComparator() {return comparing(car - car.getRegistration());}comparing 方法采用了 1 个参数。它期望使用 Function super T, ? extends U 并返回 Comparator。因为 comparing是 Comparator 上的一个静态方法所以编译器目前没有关于 T 或 U 可能是什么的线索。为了解决此问题编译器稍微扩展了推断范围将范围扩大到传递给 comparing 方法的参数之外。它观察我们是如何处理调用comparing 的结果的。根据此信息编译器确定我们仅返回该结果。接下来它看到由 comparing 返回的 Comparator 又作为 Comparator 由 createComparator 返回 。注意了编译器现在已明白我们的意图它推断应该将 T 绑定到 Car。根据此信息它知道 lambda 表达式中的 car 参数的类型应该为 Car。在这个例子中编译器必须执行一些额外的工作来推断类型但它成功了。接下来让我们看看在提高挑战难度让编译器达到其能力极限时会发生什么。推断的局限性首先我们在前一个 comparing 调用后面添加了一个新调用。在本例中我们还为 lambda 表达式的参数重新引入显式类型public static Comparator createComparator() {return comparing((Car car) - car.getRegistration()).reversed();}借助显式类型此代码没有编译问题但现在让我们丢弃类型信息看看会发生什么public static Comparator createComparator() {return comparing(car - car.getRegistration()).reversed();}如您下面所见进展并不顺利。Java 编译器抛出了错误Sample.java:21: error: cannot find symbolreturn comparing(car - car.getRegistration()).reversed();^symbol:   method getRegistration()location: variable car of type ObjectSample.java:21: error: incompatible types: Comparator cannot be converted to Comparatorreturn comparing(car - car.getRegistration()).reversed();^2 errors像上一个场景一样在包含 .reversed() 之前编译器会询问我们将如何处理调用 comparing(car - car.getRegistration()) 的结果。在上一个示例中我们以 Comparable 形式返回结果所以编译器能推断出 T 的类型为 Car。但在修改过后的版本中我们将传递 comparable 的结果作为调用 reversed() 的目标。comparable 返回Comparablereversed() 没有展示任何有关 T 的可能含义的额外信息。根据此信息编译器推断 T 的类型肯定是 Object。遗憾的是此信息对于该代码而言并不足够因为 Object 缺少我们在 lambda 表达式中调用的 getRegistration() 方法。类型推断在这一刻失败了。在这种情况下编译器实际上需要一些信息。类型推断会分析参数、返回元素或赋值元素来确定类型但在上下文提供的细节不足时编译器就会达到其能力极限。能否采用方法引用作为补救措施在我们放弃这种特殊情况之前让我们尝试另一种方法不使用 lambda 表达式而是尝试使用方法引用public static Comparator createComparator() {return comparing(Car::getRegistration).reversed();}编译器对此解决方案非常满意。它在方法引用中使用 Car:: 来推断类型。结束语Java 8 为 lambda 表达式的参数引入了有限的类型推断能力在未来的 Java 版本中会将类型推断扩展到局部变量。现在应该学会省略类型细节并信任编译器这有助于您轻松步入未来的 Java 环境。依靠类型推断和适当命名的参数编写简明、更富于表达且更少杂质的代码。只要您相信编译器能自行推断出类型就可以使用类型推断。仅在您确定编译器确实需要您的帮助的情况下提供类型细节。原作者Venkat Subramaniam原文链接Java 8 习惯用语原出处 IBM Developer来源https://www.icode9.com/content-1-863301.html

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

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

相关文章

响应式电影网站微信小程序如何运营推广

问题 Spring Cloud Gateway版本是2.2.9.RELEASE,原本项目中依赖服务自动发现来自动配置路由到微服务的,但是发现将spring.cloud.gateway.discovery.locator.enabledfalse 启动之后Gateway依然会将所有微服务自动注册到路由中,百思不得其解&a…

设计案例网站免费凡客建站官网

Redis主从架构 单节点Redis的并发能力是有上限的,要进一步提高redis的并发能力,就需要搭建主从集群,实现读写分离。 修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在…

海口网站内蒙网站建设赫伟创意星空科技

目录 1、标识符和关键字 1.1 标识符概念 1.2 标识符规则 2、命名规则 3、关键字 1、标识符和关键字 1.1 标识符概念 开发人员在程序中自定义的一些符号和名称。标示符是自己定义的,如变量名,函数名等。 1.2 标识符规则 2、命名规则 见名知意。起一个有意义的名字&#…

天骏手表网站湖北网站推广

1.使用语法 : 参数 > 函数语句; 分为以下几种形式 :  (1) ()=>语句 ( )=> statement 这是一种简写方法省略了花括号和return 相当于 ()=>&#xff5…

音乐网站建设需求分析qq在线登录手机版

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候,后来测试的时候还是发现了一些问题,现在将其进行解决,问题如下: 1. 取消显示的时候,如果取消了显示&…

公路水运建设质量安全监督网站网站建设应当注意

lowres的含义 lowres是AVCodecContext结构体中的一个成员变量,用于指定编解码器的降低分辨率级别。 在某些情况下,为了加快编解码的速度或减少计算资源的消耗,可以通过设置lowres参数来降低编解码器的分辨率级别。这将导致编解码器在处理视…

wordpress站点前台请求数过多公益网站 做公益赚钱

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 这次来聊一个大家可能也比较关心的问题,那就是就业城市选择的问题。而谈到这个问题&a…

博科SAN switch 所有端口的led闪橙色

问题描述异常断电重启后,所有端口的led闪橙色, switchshow 时所有端口disable状态。解决方法使用switchcfgpersistentenable将switch的persisten状态设置为enable,这样下次重启后,switch的状态是enable。 GLQ_FC…

中国城乡住房建设厅网站首页网站建设招标书模板

一、安装Python3 ###查看是否安装Python3 Centos 7 默认安装了python 2.7.5. 因为一些命令要用它比如yum 它使用的是python2.7.5 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置 Python指向的是Python2.7 安装依赖 y…

龙腾盛世网站建设网站开发使用的语言类

时间数据类型 1.mongo中存储时间大多为ISOData 2.获取当前时间   1. 使用new Date() 自动生成当前时间   2. 使用 ISODate() 生成当前时间   3. 获取计算机时间生成时间格式字符串 Date() 3.ISODate()   功能: 生成mongodb时间存储类型   参数&#xff1a…

做网站怎样套用模板荆州房地产网站建设

golang 学习的时候很多sample 讲的都是一个文件的go 文件怎么写,但是现实中不可能所有的实现都写到一个文件里面,按照功能的不同,要么拆分成不同的文件,要么拆分成不同的文件。下面有些个人的经验分享下,如果有问题请指…

荆州松滋网站建设搭建一个购物网站

官方文档说明:入口 WebSocket连接的链接只支持wss加密方式,且只能用域名的方式 该域名还要在微信公众平台的小程序中登记才能使用,开发->开发管理->服务器域名->修改 该域名要和https使用的一致 以域名地址:dtu.aab…

广州营销型网站建设公司哪家名气大廉洁甘孜权威发布

最近自己在尝试搭建react项目,其实react项目搭建没有想象中的那么复杂,我们只需要使用一个命令把React架子搭建好,其他的依赖可以根据具体的需求去安装,比如AntDesignMobile的UI框架,执行npm install antd-mobile --sa…

良品铺子网站规划和建设保定seo排名外包

问题 C: 21级期末机试-密码设置(20分) [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 小南有个密码本,详细记录着她在每个网站上的密码,但是有的密码设置可能存在安全问题,她想请聪明的你帮她…

网站里添加聊天框怎么做wordpress 首页添加链接

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…

嘉祥网站seo棋牌app软件开发

文章目录 1 生成kube-apiserver证书 (master节点操作)1.1 自签证书颁发机构(CA)1.2 使用自签CA签发kube-apiserver HTTPS证书 2 从Github下载二进制文件3 解压二进制包 (master节点操作)4 部署kube-apiserv…

vultr怎么做网站北京网站建设软件

date: 2016/11/3author: dlive0x01 漏洞原文翻译水平不高求轻喷感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程0x04漏洞利用过程总结给出了清晰的漏洞利用过程,结合poc食用效果更佳# http://legalhackers.com…

公司做营销型网站拼多多货源一件代发平台

1. 页面路由 router 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。本文将从页面跳转、页面返回和页面返回前增加一个询问框几个方…

做虾苗网站有哪些流程深圳公司注册多少钱

在使用机器学习构建预测模型时,我们不只是想知道“预测值(点预测)”,而是想知道“预测值落在某个范围内的可能性有多大(区间预测)”。例如当需要进行需求预测时,如果只储备最可能的需求预测量,那么缺货的概率非常的大。但是如果库…

杭州网站建设源码外国人做免费视频网站

嵌_ModbusTcpIp数据转发/通_通/发送方.MCG嵌_ModbusTcpIp数据转发/通_通/接收方.MCG嵌_ModbusTcpIp数据转发/通_通/驱动路径说明.txt嵌_ModbusTcpIp数据转发/通_通/ModBusTcp数据转发设备/ModbusTCPIPSlave.chm嵌_ModbusTcpIp数据转发/通_通/ModBusTcp数据转发设备/ModBusTCPIP…