当前位置: 首页 > 知识库问答 >
问题:

如何解释和使用Java1.8可选类

皇甫夕
2023-03-14

这是另一个StackOverflow问题的代码段:

@Override
public String convertToDatabaseColumn(final UUID entityValue) {
    return ofNullable(entityValue).map(entityUuid -> entityUuid.toString()).orElse(null);
}

我真的很难理解选修课的用法。返回代码是“返回映射(字符串)的值”还是NULL(如果失败)?

return如何作用于方法而不是类-这是可选的。不可数()?

共有3个答案

乜清野
2023-03-14

让我们一步一步来:

ofNullable(entityValue)

创建传入参数的可选值(允许为null,使用()的ofNPE为null输入抛出)

.map(entityUuid -> entityUuid.toString())

然后选择实际值,并对该值调用toString()...这只发生在entityValue不为空的情况下。如果为null,则结果来自orElse(null)

最后,将作为方法的结果返回对可选项的操作的结果。

上面的代码只是一个美化版本的

if (entityValue == null) return null;
return entityValue.toString();

选项在Java中有其位置,但您的示例不是一个好示例

这对可读性没有一点帮助,你并不是唯一一个想知道“这里发生了什么”的人。

终弘厚
2023-03-14

返回代码是“返回映射(字符串)的值”还是NULL(如果失败)?

对您可以在此处查看可选的文档。它准确地告诉您maporElse做什么。

return如何作用于方法而不是类-这是可选的。不可数()?

您没有返回该方法。返回方法的返回值。看看这个简单的例子:

int myMethod() {
    return foo();
}

int foo() { return 10; }

看见我没有返回foo方法,而是返回10foo的返回值。

注意,返回方法是可能的,带有功能接口。

在这种情况下,您将返回方法链中最后一个方法的返回值,orElse<不可用的代码>创建一个可选

曹乐意
2023-03-14

这是一个非常糟糕的可选用法。事实上,java开发人员自己说,在这种情况下不应该使用可选的,而只是作为方法的返回参数。在这个伟大的答案中可以读到更多:在类中使用可选作为属性是好的实践吗

代码可以改写为:

@Override
public String convertToDatabaseColumn(final UUID entityValue) {
    return entityValue == null ? null : entityValue.toString();
}
 类似资料:
  • 问题内容: 有两种通过play框架创建海关标签的方法。 通过在app / view / tags中定义一个Groovy模板 通过在类中直接扩展FastTag直接在纯Java中 没有最新的文件。 问题答案: 因此,类似于JavaExtensions通过扩展JavaExtensions类的工作方式,要创建FastTag,您需要创建一个扩展FastTags的类。您要作为标记执行的每个方法都必须符合以下方

  • 我使用潜在Dirichlet分配(sklearn实现)分析了大约500篇科学文章摘要,得到了包含最重要单词的主题(德语)。我的问题是如何解释这些与最重要的词语相关的价值观。我假设每个主题的所有单词的概率加起来等于1,但事实并非如此。 我如何解释这些值?例如,我想知道为什么主题#20中的单词比其他主题的值高得多。它们的绝对高度与贝叶斯概率有关吗?该主题在语料库中更常见吗?我还不能把这些值和LDA背后

  • 问题内容: 如何解开返回为以下内容的字符串: (可选(可选“蓝色”)) cityLabelName打印为 问题答案: 给定一个double可选,如以下双重包装: @Leo 表明您可以使用 可选绑定 两次: 或强制解开两次: 您可以使用以下5种方法来安全解开double可选: 方法1: 您还可以使用 模式匹配 : 正如@netigger在回答中指出的那样,它也可以写成: 简洁性虽然较差,但较容易阅读

  • 问题内容: 快速使用以下语法进行流控制 在这种情况下 ,真值上下文的语义是什么 ? 是否允许 表达式链接 (如下所示)? 如果是这样,布尔表达式是否会短路? 问题答案: 首先检查它是否为零或是否有数据。如果为零,则不会执行if语句。如果有数据,则将数据解包并分配给if语句的范围。然后执行括号内的代码。 无法在一个if语句中链接此功能。不直接评估为布尔值。最好将“ if let”视为一个特殊关键字。

  • 问题内容: 为简单起见,请设想这种情况,我们有一台2位计算机,它具有一对称为r1和r2的2位寄存器,并且仅适用于立即寻址。 假设位序列 00 表示 添加 到我们的CPU中。也 01 的装置将数据移动到R 1和 10组 的装置将数据移动到R2。 因此,这台计算机和一个汇编器都有一种汇编语言,其中的示例代码将像 简而言之,当我将此代码汇编成本地语言时,文件将类似于: 上面的12位是以下代码的本机代码:

  • 在pom.xml中有以下依赖项 编译时出现以下错误:[error]无法对项目执行目标通信-bundle:无法解析项目org.usenet的依赖关系。btrust:communication-bundle:bundle:0.0.1-snapshot:找不到项目org.use net.node.exchange.data.json:jar:0.0.3-snapshot->[帮助1] 然而,我有需要的罐