Java 8的Optionals:实际案例

P先生:

我已经编写了这段代码,现在我正在重构。

String status = "";
if (null != issue.getStatus()) {
    status = issue.getStatus().getDescription();
}

String locations = "";
if (null != issue.getSites()) {
    locations = issue.getSites().stream()
            .map(Site::getName)
            .collect(Collectors.joining(","));
}

如果null == issue.getSites()null == issue.getStatus()我想得到一个空的字符串。

在这种情况下,我应该使用Optionals吗?如何最好地使用它们以使其尽可能简单?

弗拉迪斯拉夫·瓦尔斯拉夫(Vladislav Varslavans):

Optionals的想法是返回Optional.empty()而不是null这样,无论谁使用您的方法,都将立即知道没有(或null)是调用该方法的有效结果。他也将知道此案需要解决。

相反,当您返回时null,API用户不清楚是否应该检查null。

举个例子:

String a = getString();
Optional<String> b = getOptionalString();

a可能总是有效的对象或为null?除非您使用的代码,否则您不知道这一点getString()

同时,b您马上知道b可能是emptynon empty然后您采取相应的行动。

在您的例子,你可以改变你的代码,以便issue.getSites()issue.getStatus()将返回Optional,而不是null或正常对象。

如注释中所述-您还可以考虑从方法中返回默认值而不是null的选项。例如,getStatus()可能返回空字符串,并且getSites()可能返回空列表。除非您需要区分默认值或默认值的情况null

然后,您可以执行以下操作:

String status = issue.getStatus().map(issue -> issue.getDescription()).orElse("");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章