我有以下代码尝试使用Optional类:
import java.util.Optional;
// one class needs to have a main() method
public class HelloWorld
{
public String orelesMethod() {
return "hello";
}
public void test() {
String value;
value = Optional.ofNullable(null).orElse(orelesMethod());
System.out.println(value);
}
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
HelloWorld hello = new HelloWorld();
hello.test();
}
}
Run Code Online (Sandbox Code Playgroud)
编译时说:
incompatible types: Object cannot be converted to String
value = Optional.ofNullable(null).orElse(orelesMethod());
Run Code Online (Sandbox Code Playgroud)
我找不到问题所在,有人可以帮忙吗?
谢谢!
您已将定义value为type String,但Optional.ofNullable(null)返回,Optional<Object>因为任何对象类型都可以,null并且您未指定实际类型。然后,您正在调用orElsetype的对象,Optional<Object>因为T是Object,该orElse方法返回了一个Object不能转换为的type的对象String。
因此,您需要在调用时指定类型ofNullable:
value = Optional.<String>ofNullable(null).orElse(orelesMethod());
Run Code Online (Sandbox Code Playgroud)
您可能还想使用orElseGetmethod以便orelesMethod在可选包含值时不进行调用。