原始“null”和 Java 8

2024-02-22

我知道处理的最佳实践null原语是使用盒装包装器,例如Integer代替int,正如这里所讨论的

原始数据类型为 Null https://stackoverflow.com/questions/11047276/null-for-primitive-data-types

然而,今天的 Java 8 仍然如此吗? 引入了可选原语,例如OptionalInt, whose OptionalInt.empty()有效地代表了null价值?我的理解是,Optional 只能用于方法返回类型,而不应用作属性本身的类型。 “可为空”基元是否仍应存储为装箱属性?他们应该只是Optional在方法返回类型中?或者存储为OptionalInt在财产本身?


假设你有一个方法

public void logRequest(Integer userID, String content){
    //log content locally or in db or a rest call
}

假设您获得userID来自特定用户的数据库。可能有以下几种可能:

  • DB 返回一个用户ID。
  • 没有找到id。

所以现在如果没有找到 id,你会传递给什么logRequest?

  • 你通过吗null?如果该方法没有适当的空检查怎么办?应该推断出什么null to?
  • 如果你通过0 or -1? If null means 0那么它可能与 ID 为的实际用户相矛盾0。怎么区分null和0呢?

当然,上述问题可以通过适当的文档和固定规则来解决,但它会带来更高的维护性并且容易出错。正确编写的代码应该有自己的文档。

现在假设该方法被声明为:

public void logRequest(OptionalInt userID, String content)

该方法本身非常清楚地表明它需要一个可选的参数。因此只有两种情况需要处理:发送适当的参数(这意味着使用0)。如果可选值为空,则方法正确地知道如何处理。 (与之前不同的是,我们必须阅读其文档来预测行为)。

因此,方法声明本身就清楚地表明了行为,而不是文档为您做这件事并依赖文档和随意猜测。选项在这种情况下非常有用。

PS:总感觉有一股掐过的感觉null到一个期望的方法Integer。肯定感觉不对啊!天哪,在 Java 中,潜意识总是将整数视为原语。它们并不意味着被取消。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原始“null”和 Java 8 的相关文章

随机推荐

  • 创建 PDF 时将首页旋转为横向

    我想将文档中的所有页面旋转为横向 i tried PdfWriter GetInstance mydoc New FileStream filename FileMode Create mydoc Open mydoc SetPageSiz
  • 如何获取不同长度列表中项目的频率

    假设我有以下列表 test lt list c a b c c a c c gt test 1 1 a b c 2 1 a 3 1 c 我该怎么做 或使用函数 来获取列表中唯一项目的频率 如下所示 a 2 b 1 c 2 我尝试使用表 测试
  • 错误的 WebTarget 实现 SseEventSource

    我已经实现了一种通过 SSE 事件在我的应用程序中接收来自 OpenHab 的实时通知的方法 以前我使用 glassfish 服务器来部署我的应用程序 但我需要切换到 Payara 现在无法建立 sse 连接 我收到以下错误 参数fish
  • AS3 fileStream出现将文件读入内存

    我正在编写一个流程 用户需要选择一个远远超出其可用 RAM 的文件 并将该文件分成小块 用于上传 我能够创建对所述文件的 File 引用 但是当我尝试将其传递给 fileStream 时 它似乎尝试在对其进行操作之前尝试将其读入内存 有没有
  • Webpack动态请求

    它不起作用 let serviceName AuthService let servicePath app services serviceName let service require servicePath 它正在工作 let ser
  • C# 中的复杂计算

    最好的 最有效的 工具是什么 NET C 用于计算 积分 偏导数 其他不平凡的数学 人们能否对 Mathematica 和 Matlab 及其集成发表评论C Math NET http www mathdotnet com是一个用 C 编写
  • 2d 球未正确碰撞

    我只是想编写一个漂亮的物理游戏 球碰撞看起来不错 但如果球碰撞太慢 它们就会 粘 在一起 我不知道他们为什么这样做 这是我的碰撞函数 private void checkForCollision ArrayList
  • 将网络响应流放入 iframe - 麻烦

    嘿 又来了 stackoverflowers 我正在从旧的 ASP VBScript 中 迁移一个网站 并且我必须使用 iFrame 来保持旧的内容在新容器中工作 在 aspx 页面上 我有一个带有 runat server 属性的 iFr
  • 调用map后pyspark EOFError

    我是 Spark 和 pyspark 的新手 我正在将一个小 csv 文件 40k 读入数据帧 from pyspark sql import functions as F df sqlContext read format com dat
  • 使用 ODBC + Access 时转义 SQL 查询中的输入数据

    我试过了odbc prepare odbc execute 更新 Access 文件中的记录 但我总是得到SQL state 07001关于不正确的列计数的错误消息 实际上 该消息是西班牙式英语 没有多大意义
  • 重写超类的指定初始值设定项

    我正在读一本书 其中有一个指南 如果一个类声明了与其超类不同的指定初始值设定项 则必须覆盖超类的指定初始值设定项才能调用新的指定初始值设定项 换句话说 据我了解 这条准则是 如果我从其超类中对我的类进行子类化 并且我的子类有一个与 des
  • Keras model.to_json() 错误:“rawunicodeescape”编解码器无法解码位置 94-98 中的字节:截断的 \uXXXX

    model to json 对于模型 层 类型 输出形状参数 连接到 lambda 1 Lambda 无 3 160 320 0lambda input 1 0 0
  • Linux内核中如何选择“sys”和“proc”文件

    据我所知 在Linux文件系统中 为了用户空间和内核空间之间的信息通信 使用了两种虚拟文件系统 1 过程文件系统 http www tldp org LDP Linux Filesystem Hierarchy html proc html
  • Perl 没有警告旧 Perl 的“实验性”

    我有一段代码使用了很多实验 when smartmatch given 功能 这不是我的代码 我不想看到很多关于实验性功能的警告 所以我添加了no warnings experimental 到这段代码 但experimental类别仅在
  • AFNetworking 2.x.x 中的 AFJSONParameterEncoding

    我正在实施以下贝宝 REST API curl v https api sandbox paypal com v1 vault credit card H Content Type application json H Authorizat
  • 我的 docker 容器没有互联网

    我本来可以正常工作 但现在停止了 我尝试了以下命令但没有效果 docker run dns 8 8 8 8 base ping google com docker run base ping google com sysctl w net
  • React Native 中的旋转动画

    我需要用一个图像创建一个动画 该图像将围绕另一个图像旋转 我已经尝试使用类似问题的建议 例如围绕另一个圆制作一个圆的动画 https stackoverflow com questions 55667722 animate a circle
  • TFS 2017 是否能够将构建定义导出和导入到远程服务器中?

    我们在内部服务器上安装了 Team Foundation Server 2017 我们在沙箱环境中构建 NET 代码 但希望能够手动或远程推送新的构建定义或更新 到我们的客户端 生产服务器 自动化的方式 是的 您可以在 TFS 2017 中
  • 在不知道键的情况下解析 json

    我试图在不知道 json 格式的键和结构的情况下解析 java 中的 json 并将该数据保存到 hashmap 中 我如何循环遍历整个 json 格式并将键和值存储到 hashmap 中 id 12345 value 123 person
  • 原始“null”和 Java 8

    我知道处理的最佳实践null原语是使用盒装包装器 例如Integer代替int 正如这里所讨论的 原始数据类型为 Null https stackoverflow com questions 11047276 null for primit