gpt4 book ai didi

java-8 - 原始 "nulls"和 Java 8

转载 作者:行者123 更新时间:2023-12-04 11:04:35 24 4
gpt4 key购买 nike

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

Null for primitive data types

然而,在今天的 Java 8 中,这是否仍然成立?
引入了 optional 原语,例如 OptionalInt ,其 OptionalInt.empty()有效地表示 null值(value)?我的理解是 Optionals 应该只用于方法返回类型,而不是属性本身的类型。 “可为空”原语是否仍应作为装箱属性存储?他们应该只是Optional在方法返回类型中?或存储为 OptionalInt在属性(property)本身?

最佳答案

假设你有一个方法

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

假设您获得了 userID来自特定用户的数据库。可能有以下几种可能:
  • DB 返回一个用户 ID。
  • 没有找到身份证。

  • 所以现在如果没有找到 id,你会传递什么给 logRequest ?
  • 你通过了吗null ?如果该方法没有适当的空检查怎么办。它应该推断出什么null到?
  • 如果你通过0-1 ?如 null意味着 0那么它可能与 ID 为 0 的实际用户相矛盾。 .你如何区分null和0?

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

    现在说该方法被声明为:
    public void logRequest(OptionalInt userID, String content)

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

    因此,方法声明本身就明确了行为,而不是文档为您执行此操作并依赖文档和胡乱猜测。 Optionals 在这种情况下非常有用。

    PS:路过时总感觉捏捏 null到期望 Integer 的方法.感觉肯定不对啊!天哪,在 Java 中,潜意识总是将整数视为原语。它们并不意味着要归零。

    关于java-8 - 原始 "nulls"和 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29553024/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com