当使用Java8Optional
类时,有两种方法可以将值包装到Optional中。
String foobar = <value or null>;
Optional.of(foobar); // May throw NullPointerException
Optional.ofNullable(foobar); // Safe from NullPointerException
我理解可选。不可用的
是使用可选
的唯一安全方法,但为什么可选呢。是否存在
?为什么不直接使用可选。是否始终处于安全的一侧?
这取决于情景。
假设你有一些业务功能,你需要进一步处理具有该值的东西,但是在处理时具有null
值会影响它。
然后,在这种情况下,可以使用Optional
String nullName = null;
String name = Optional.ofNullable(nullName)
.map(<doSomething>)
.orElse("Default value in case of null");
此外,如果你知道你的代码不应该工作,如果对象是null,你可以抛出异常使用Optional.orElseThrow
String nullName = null;
String name = Optional.ofNullable(nullName)
.orElseThrow(NullPointerException::new);
// .orElseThrow(CustomException::new);
您的问题基于这样一种假设:可能抛出NullPointerException
的代码比不抛出的代码更糟糕。这种假设是错误的。如果由于程序逻辑,您希望您的foobar
永远不会为空,那么最好使用Optional。of(foobar)
因为您将看到一个NullPointerException
,它将指示您的程序有一个bug。如果使用选项。由于该错误,
foobar
和foobar
恰好是null
,那么您的程序将继续默默地不正确地工作,这可能是一个更大的灾难。这样一来,错误可能会在很久以后发生,并且更难理解错误发生在哪一点。
为了区分(a)任何值、(b)显式null和(c)无值的情况,我使用和注释。 这在Spring Boot 2.1.0/Jackson 2.9.7中非常适用。 目前(更新后)似乎像一样处理。它呈现,尽管该字段是用注释的。在Spring Boot 2.5.5/Jackson 2.12.5中,它呈现:
问题内容: 它以空字符串开头,而不是nil。即使将其显式设置为nil,它仍然是一个空字符串。我不明白 也许通过分配nil使其易于清除?用它编写代码很麻烦。 问题答案: 这是历史性的事情。空字符串和字符串之间没有任何区别。在Objective- C中,无需在两者之间进行区别,因为您可以在Objective-C中调用方法。 同样,在Objective-C中也无法阻止用户分配给属性。生成的合同可以是可选
我在许多网站上读到可选的应该只作为返回类型使用,而不是在方法参数中使用。我很难找到一个合乎逻辑的原因。例如,我有一个逻辑,它有两个可选参数。因此,我认为这样写我的方法签名是有意义的(解决方案1): 许多网页指定可选的不应用作方法参数。考虑到这一点,我可以使用下面的方法签名并添加一个清晰的Javadoc注释来指定参数可能是空的,希望将来的维护者会读取Javadoc并因此在使用参数之前总是执行空检查(
我读了很多关于应该使用的案例。 我读过的许多页面都说不应该用于私有实例变量,而应该由getters返回。 我认为将私有实例变量作为可选变量仍然是有用的。如果有人查看我的代码,他们可以看到一个值可以是空的,而不必检查留档是否可以返回空。 在Scala中,null从未使用过,它只是用于与Java的互操作性。如果值可以为null,建议始终使用可选值。这种方法对我来说更有意义。 这里有一页提到了它: ht
这两种方法有什么区别:和? 请举个例子。
我想使用可选实用程序在JDK8中执行空检查。这是我写的代码,给我一个错误: 这里可以显示或不显示“jcr:description”。如果它存在,我想在description变量中使用该值,如果为null,只需为description设置空白字符串。这里也可以使用Lambda表达式吗?谢谢