Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 如何转换可选<;对象>;至可选<;字符串>;_Java_Java 8_Optional_Java 11 - Fatal编程技术网

Java 如何转换可选<;对象>;至可选<;字符串>;

Java 如何转换可选<;对象>;至可选<;字符串>;,java,java-8,optional,java-11,Java,Java 8,Optional,Java 11,我在Java11中有这段代码 Object a = getObjectOrNullIfNotAvailable(); String value = a==null ? null : a.toString(); 我想用可选的方法来写这段代码,我能想到的最好的方法是。我还没有试过运行它,但我怀疑它会起作用 Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable()); Optional<Str

我在Java11中有这段代码

Object a = getObjectOrNullIfNotAvailable();
String value = a==null ? null : a.toString();
我想用可选的方法来写这段代码,我能想到的最好的方法是。我还没有试过运行它,但我怀疑它会起作用

Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
Optional<String> oas = oa.map(a -> a.toString());
String value = oas.orElse(null);
Optional oa=Optional.ofNullable(getObjectOrNullIfNotAvailable());
可选oas=oa.map(a->a.toString());
字符串值=oas.orElse(空);
除了在可选地图上运行地图之外,我还有什么办法可以做到这一点吗。我希望得到下面的代码,但这不起作用

Optional<Object> oa = Optional.ofNullable(getObjectOrNullIfNotAvailable());
String value = oa.ifPresentOrElse(a -> a.toString(), a -> null);
Optional oa=Optional.ofNullable(getObjectOrNullIfNotAvailable());
字符串值=oa.ifpresentorese(a->a.toString(),a->null);

从方法的返回值中创建可选值似乎有点尴尬。首先让您的
getObjectOrNullIfNotAvailable()
方法返回一个可选值。然后使用
map
操作符将其转换为字符串。这是它的样子

Optional<Object> oa = someOptionalReturningMethod();
String value = oa.map(Object::toString).orElse(null);

您可以使用
map
后跟
orElse
无需像这样将它们分开:

String value = Optional.ofNullable(a)
        .map(Object::toString)
        .orElse(null);
使用:

否则,您可以检查对象是否为null,并在这种情况下返回一个包含String.valueOf(Object obj)或Objects.toString(Object obj)的内部带有“null”的字符串。例如


Optional不是避免空检查的工具。您的第一个片段是您应该使用的。Optional被设计为方法的返回类型,表示它们可以返回一个“空”值。你说的“这不起作用”是什么意思?请包括编译器错误消息、堆栈跟踪异常或不正确的输出。另外,调用
map
有什么不对?@rgetman它“不起作用”,因为
ifpresentorese
是一个
void
方法,所以不能分配给
value
。@andrease当然,我已经复制了代码并注意到了那个错误和另一个错误。但通常我们要求OP对错误的描述要比“不起作用”更详细。
Optional
背后的理性是强制任何用户进行空检查,因为不进行任何检查或抛出异常就不可能得到
Optional
中的内容。这会将错误检测推到比使用
null
要早得多的阶段,用户会忘记检查,并可能将值转发给其他方,直到应用程序在一天后在最终使用该值时在不同的位置崩溃。我想你的意思是可选的。谢谢,这篇关于
Objects.toString()
:1)的工作说明与
String.valueOf()的工作说明相同,后者适用于旧版本的Java;2) 两者都返回字符串
“null”
如果参数是
null
(而不是问题代码中的
null
),您是对的,我将在回答中澄清这一点。谢谢你的留言。。。。应答没有问题如果该方法返回
null
,则此操作将失败。使用
Optional.ofNullable(…)
代替返回类型,值得将方法重命名为更有意义的方法,而不是
getObjectOrNullIfNotAvailable
。感谢您指出这一点。我已经更新了答案。
String value = Optional.ofNullable(a)
        .map(Object::toString)
        .orElse(null);
String value = Optional.ofNullable(getObjectOrNullIfNotAvailable()).map(Object::toString).orElse(null);
  String value = Objects.toString(getObjectOrNullIfNotAvailable())