rest api 可选参数_可选类型API

rest api 可选参数

Java 8引入了Optional类。 简而言之,不是返回null,而是检查null,而是返回Optional实例,该实例可以设置值,也可以不设置值。 这样,您不会因NullPointerException而失败。

我不会讨论Optional类型是否会完全消除NPE(不会)。 相反,我将从不同的角度讨论问题-API设计。 除了Java的Optional外,我还将显示guava的Optional和scala的Option ,并进行比较。

正如Joshua Bloch所建议的,API应该尽可能小,但不能小。 API的概念权重应最小化,如果您想知道是否在API中包含某些内容,则应将其忽略。 API应该易于使用,并且难以滥用,并且理想情况下应该具有一个(或两个)主要使用模式。 Optional类型是必须做出所有这些选择的一个很好的例子。

这的默认用法是什么? 您将获得一个可选类型,并且仅在设置了值的情况下才想执行一些代码。 您显然可以通过将它与null进行比较来做到这一点,但是您常常会忘记这一点,而可选类型迫使您意识到此值实际上是可以设置的。 第二个重要用例是,如果未设置默认值,则能够轻松提供默认值。

让我们首先从三个方面中最差的一个开始(我认为)– scala的Option 。 最初,此类似乎为您提供了许多功能。 但是,正如scala的正常做法一样,有很多不同的方法来使用类,但没有一种方法比其他方法更好。 对我而言,这种情况下特别糟糕的决定是使Option (隐式)转换为Iterable 。 对于非scala开发人员,让我们假设它是Iterable 。 但是它只能有一个或零个元素。 因此,为了实现我们的默认和最常见的用例,我们提供以下选项:

  • if (option.nonEmpty) {option.get.doSomething()}请使用命令式样式
  • 使用.foreachoption.foreach(v => v.doSomething)
  • 使用foreach循环(与上面不同): for (value <- option) {value.doSomething()}
  • 使用a来理解(用于…收益率)(与上述两项不同)
  • 使用模式匹配- case Somecase None
  • 使用地图,折叠,收集等–这使过程更进一步–不仅获得了价值,而且还对其应用了一些功能

因此,从可选类型的基本概念来看,我们有一个包含数十种方法的类。 这个API在概念上很重要。 没有明显的首选方法可以处理最常见的情况,实际上,许多scala开发人员首选的方法使用某种形式的foreach,当您知道最多有一个值时,这听起来有些怪异。

现在,让我们继续第二名候选人-Java 8 Optional 。 您只有两种使用方式:使用if子句的命令式检查和ifPresent(function)方法,其中提供了一个在有​​值时处理代码的函数。 您还可以使用几个重载方法来提供默认值(第二个用例)。 我不喜欢的是mapflatMapfilter方法。 与上面的scala一样,它们很有用,但是可以将其忽略(它们的用法分开处理,几乎没有增加的冗长性),也可以将它们简化为一个函数-map。 它与flatMap有细微的差别,并且过滤单个元素并不是最有用的方法,此外,您可以使用map函数来实现。

我知道到目前为止,您可能已经准备好(恼怒地)问您将如何编写非常简洁的代码,而没有折叠,收集,flatMap,过滤器的功能。 在使用给定的可选类型执行操作后返回另一个可选类型是第三个用例,这对于长方法很重要。 它不如其他两个常见,因此应注意较少。 理想情况下,一种方法就足够了,所有其他子用例都可以在map函数本身中处理。

因此,我们找到了赢家–番石榴Optional 。 它仅具有处理第一个用例的必要方法(因为它是为缺少一流功能的Java版本开发的)。 上面的第二个和第三个用例具有尽可能少的方法( ortransform(..) )。 轻量级API,可以用相同数量的代码实现几乎相同的事情。

实际上,针对主要用例采用功能性方法不一定是好方法–拥有Optional类型的意义不在于在功能上可以使用它–要使这一点意识到,价值可能不存在。 我并不是说要在scala和Java8中摆脱它,但也许可以重新考虑.isPresent().get()

最重要的是–很难设计API。 就简单类型而言,即使是简单的东西,在主要和次要美国用例方面也需要考虑很多方面,是否需要方便的方法,或者它们会给API带来不必要的复杂性,并且可以用其他方法处理(不是一定更冗长)。

最后-在可能返回null的情况下使用可选类型-NPE易于调试和修复,但容易遗漏并且可能在错误的时刻发生。

翻译自: https://www.javacodegeeks.com/2014/03/the-optional-type-api.html

rest api 可选参数

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

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

相关文章

大功率无线输出电台使用注意事项

随着智慧城市的建设&#xff0c;当前对无线通讯设备的需求越来越多&#xff0c;大功率无线电台需求越来越广泛&#xff0c;在消防&#xff0c;工业和农业等行业中起着举足轻重作用。大功率无线电台的使用方法有一定的要求&#xff0c;如果操作不当&#xff0c;会造成不好的体验…

RS-485总线HUB中继器产品性能特点介绍

RS-485总线HUB中继器&#xff0c;符合RS-485协议&#xff0c;独立3路总线电接口数据相互转发&#xff0c;电信号中继并为电缆系统提供星形链接。接下来就由飞畅科技来为大家详细介绍下RS-485总线HUB中继器产品性能特点&#xff0c;一起来看看吧&#xff01; RS-485总线HUB中继…

SX1268与SX1278、SX1276对比分析以及选型南

1、产品简述 SX1278/1276是Semtech公司在2013年推出的一款远距离、低功耗的无线收发器&#xff0c;是一款性能高的物联网无线收发器&#xff0c;具备特殊的LoRa调制方式&#xff0c;在一定程度上增加了通信距离&#xff1b;而SX1268是一款新产品&#xff0c;同样由Semtech公司在…

【渝粤教育】国家开放大学2018年春季 8634-22TAndroid智能手机编程 参考试题

编号&#xff1a;8634 17-18学年第1学期期末考试 Android智能手机编程 试题&#xff08;开卷&#xff09; 一、选择题&#xff1a;&#xff08;每题4分&#xff0c;共40分&#xff09; 1&#xff0e;Android智能手机平台是基于&#xff08; &#xff09;程序语言来进行应用开…

用Java对HashMap排序

介绍&#xff1a; 在本教程中&#xff0c;我们将学习如何对Java HashMap进行排序。 我们可以按键或按值对HashMap进行排序。 我们将讨论这两种策略。 对Java 为了跟上本文的其余部分&#xff0c;我们首先构造一个HashMap&#xff1a; HashMap<Integer, Student> map …

【渝粤教育】国家开放大学2018年秋季 0008-22T简明现代汉语 参考试题

编号&#xff1a;0025 座位号&#xff1a; 18-19学年第1学期期末考试 数据结构 试题&#xff08;开卷&#xff09; 一、选择题&#xff1a;&#xff08;每题4分&#xff0c;共20分&#xff09; 1&#xff0e;以下&#xff08; &#xff09;不是队列的基本运算。 A&#xff0e…

RS-232转RS-485/422串口转换器产品介绍

RS-232转RS-485/422串口转换器是一款专为工业自动化通信中&#xff0c;解决RS-232接口信号转换成RS-485/422信号的光电隔离型转换器。那么&#xff0c;对于RS-232转RS-485/422串口转换器的产品性能参数你是否了解呢&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下吧&a…

【应用】如何更好的简化工业现场采集控制?

案例背景 随着工业4.0的发展&#xff0c;工业自动化程度不断提高。实现工业4.0&#xff0c;需要高度的工业化、自动化基础。工业大数据是未来工业发展的关键。全球各国制造业创新战略的实施基础都是工业大数据的搜集和特征。 业内人士提醒,“工业4.0”的发展是一个长期过程,需要…

【渝粤教育】国家开放大学2018年秋季 0161-22T教师职业道德 参考试题

编号&#xff1a;0177 b 2018-2019年度第一学期期末考试 电机学&#xff08;2&#xff09; 试 题 2019年 1 月 一、填空题&#xff08;每空4分 &#xff0c;共40分&#xff09;1&#xff0e;一台隐极三相同步发电机时空向量中j轴与A轴重合&#xff0c;某瞬间转子基本波励磁磁动…

SFP光模块是什么? SFP光模块的类型及应用介绍!

SFP光模块是SFP封装的热插拔小封装模块&#xff0c;最高速率可达10.3G&#xff0c;接口为LC。SFP光模块主要由激光器构成。SFP分类可分为速率分类、波长分类、模式分类。那么&#xff0c;什么是SFP&#xff1f;SFP光模块的类型及应用有哪些&#xff1f;接下来我们就跟随飞畅科技…

基于Semtech LoRa SX1268 电路设计及PCB布局

目录 产品简述 应用环境 电路设计 产品简述 SX1268是Semtech公司推出的一款远距离、低功耗的sub-GHz无线收发器&#xff0c;支持的工作频段涵盖了150–960MHz。SX1268提供了两种调试方式&#xff0c; LoRa以及传统的(G)FSK&#xff0c;是一款高性能物联网无线收发器&#x…

【渝粤教育】国家开放大学2018年秋季 0273-22T中国现代文学 参考试题

试卷代号&#xff1a;0283 2018-2019年度第1学期期末考试 广告创意与表现&#xff08;二&#xff09;试题&#xff08;闭卷&#xff09; 2019年1月 一、对下列广告作品的创意进行评析。&#xff08;50分&#xff09; &#xff08;请预留500字空格&#xff09; 二、对下列广告…

【渝粤教育】国家开放大学2018年秋季 0508-21T影视特技及后期合成 参考试题

编号&#xff1a;0538 座位号 2018&#xff5e;2019学年度第一学期期末考试 社区护理学&#xff08;开卷&#xff09;试题 2018年11月 单选题&#xff08;10题&#xff0c;每题3分&#xff0c;共30分,请把答案填在下面对应题号的方框里&#xff09; 1.构成社区的最基本要素是 …

CC1101、SI4432、SI4463 相互通信的可能性与得失探讨

目录 射频芯片简介 三种射频芯片相互通信的可能行探究 射频芯片简介 C1101 一款低于1GHz设计旨在用于极低功耗RF应用。其主要针对工业、科研和医疗(ISM)以及短距离无线通信设备(SRD)。CC1101可提供对数据包处理、数据缓冲、突发传输、接收信号强度指示(RSSI)、空闲信道评估…

短款Apache Camel K

您可能已经看到我们在Camel K周围的Apache Camel社区中所做的工作。 Nicola在半年前的博客中介绍了Camel K &#xff0c; 就在几个月前&#xff0c;我们正在讨论一个新项目&#xff0c;该项目可以作为Apache Camel的一部分启动。 一个有可能改变人们处理集成方式的项目。 该项目…

光模块的参数有哪些呢?

在现代信息网络汇总&#xff0c;光纤通信占据着主导地位&#xff0c;随着网络的覆盖越来越广泛和通信容量的不断增加&#xff0c;通信链路的提升也是必然的发展&#xff0c;光模块在光通信网络中实现着光电信号的转换&#xff0c;是光纤通信的主要器件之一。但是&#xff0c;我…

Modbus是什么?与RS485协议区别与联系有哪些

概述 RS485是广泛用于工业实施中的串行数据传输标准。在实现RS485通信时&#xff0c;通常使用Modbus协议。这将RS485与通过以ASCII字符进行传输进行通信的RS232协议区分开来。要使用RS485协议处理设备&#xff0c;了解Modbus非常重要。 内容 什么是RS485通讯&#xff1f; 什…

【渝粤教育】国家开放大学2018年秋季 0653-21T机电控制与可编程控制技术 参考试题

〖ZDA1(D〗 〖ZD)〗〖ZDA2(D〗 试题&#xff08;开卷&#xff09;〖ZD)〗〖ZDA3(D〗 (共6页)〖ZD)〗〖ZDA4(D〗 (共2页)〖ZD)〗〖ZDA8(D〗 2018—2019学年度第一学期期末考试〖ZD)〗〖ZDA9&#xff08;D〗 2019年1月〖ZD)〗 〖MQ(《1BW》D205mm。25mm(0,-38mm)-W〗〖BG&#xf…

布局 线宽 间距 走线 泪滴 过孔 【快速提升PCB板Layout质量的6个细节】

前言 现在很多的PCB Layout工程师都是按照硬件工程师或者PI SI工程师给出的约束规则来完成布局布线的&#xff0c;俗称的“拉线工”。如不想被当做“拉线工”来看待。要具备一定的电路理解能与SI/PI工程师做PI/SI分析的能力。 PCB Layout是一项技术活&#xff0c;也是经验活。学…

工业交换机那么贵,为什么那么多人都在用?

工业交换机具有电信级性能特征&#xff0c;可耐受严苛的工作环境。产品系列丰富&#xff0c;端口配置灵活&#xff0c;可满足各种工业领域的使用需求。假如工业交换机跟普通商用交换机的功能一样&#xff0c;但是普通交换机价格却更便宜&#xff0c;你会怎么选&#xff0c;答案…