在Java中使用Optional类时,对象无法转换为字符串

rat*_*zip 0 java

我有以下代码尝试使用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)

我找不到问题所在,有人可以帮忙吗?

谢谢!

awe*_*oon 6

您已将定义value为type String,但Optional.ofNullable(null)返回,Optional<Object>因为任何对象类型都可以,null并且您未指定实际类型。然后,您正在调用orElsetype的对象,Optional<Object>因为TObject,该orElse方法返回了一个Object不能转换为的type的对象String

因此,您需要在调用时指定类型ofNullable

value = Optional.<String>ofNullable(null).orElse(orelesMethod());
Run Code Online (Sandbox Code Playgroud)

您可能还想使用orElseGetmethod以便orelesMethod在可选包含值时不进行调用。