Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Objects.isNull与Optional.ofNullable_Java_Java 8 - Fatal编程技术网

Java Objects.isNull与Optional.ofNullable

Java Objects.isNull与Optional.ofNullable,java,java-8,Java,Java 8,我在测试中使用了这段代码 if (Objects.isNull(o)) { return null; } return String.valueOf(o); 当我将这段代码替换为 Optional.ofNullable(String.valueOf(o)).orElse(null); 我的测试中有以下断言错误: Expecting: <"null"> to be equal to: <null

我在测试中使用了这段代码

if (Objects.isNull(o)) {
            return null;
        }
        return String.valueOf(o);   
当我将这段代码替换为

Optional.ofNullable(String.valueOf(o)).orElse(null);
我的测试中有以下断言错误:

Expecting: <"null">
to be equal to: <null>
but was not.
期望:
等于:
但事实并非如此。
String.valueOf()返回对象的字符串(如果不为null)或返回“null”字符串

直接从字符串类:

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
这意味着在您的断言中,您正在测试“null”等于null,但失败。

可选。当
o==null
时,of nullable(String.valueOf(o))
将不是空可选的,因为
String.valueOf(null)
返回字符串
“null”

正确使用可选选项有:

Optional.ofNullable(o).map(String::valueOf).orElse(null);

其中
of nullable(null)
将使空成为可选,从而导致最终调用
orElse(null)

为什么不向我们展示您的测试用例?可能是字符串。valueOf(null)将其转换为“null”。你还期望什么呢?顺便说一句,
对象.isNull(o)
是一种写
o==null
的笨拙方式,你真的不应该在这里使用
可选的
。如果你真的想使用API而不是表达式
o==null?null:o.toString()
,您应该使用。“猜猜看,它是如何实现的……那真是太好了,”霍尔格说