英文:
Objects.isNull vs. Optional.ofNullable
问题
以下是翻译好的内容:
我有这段用于测试的代码片段
if (Objects.isNull(o)) {
return null;
}
return String.valueOf(o);
当我用这段代码替换时
Optional.ofNullable(String.valueOf(o)).orElse(null);
在我的测试中,我得到了这个断言错误:
期望: "<null>"
要等于: <null>
但实际并非如此。
英文:
I have this piece of code used in a test
if (Objects.isNull(o)) {
return null;
}
return String.valueOf(o);
and when I replace this piece of code with
Optional.ofNullable(String.valueOf(o)).orElse(null);
I have this assertion error in my tests:
Expecting: <"null">
to be equal to: <null>
but was not.
答案1
得分: 2
`Optional.ofNullable(String.valueOf(o))` 当 `o == null` 时不会是一个空的 Optional,因为 `String.valueOf(null)` 会返回字符串 `"null"`。
正确的 Optional 使用方式是:
Optional.ofNullable(o).map(String::valueOf).orElse(null);
在这种方式中,`ofNullable(null)` 会生成一个空的 Optional,导致最终会调用 `orElse(null)`。
英文:
Optional.ofNullable(String.valueOf(o))
will not be an empty optional when o == null
, because String.valueOf(null)
returns the String "null"
.
The correct use of optional there is:
Optional.ofNullable(o).map(String::valueOf).orElse(null);
Where ofNullable(null)
will make an empty optional, causing orElse(null)
to be eventually invoked.
答案2
得分: 1
String.valueOf()
如果对象不为null,则返回对象的toString()
,否则返回字符串"null"。
直接来自String
类:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
这意味着在你的断言中,你正在测试"null"是否等于null,这会导致失败。
英文:
String.valueOf() return toStirng() of an object if not null or return "null" string
straight from the String class:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
that means in your assertion you are testing "null" equals null which get fail.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论