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

时间:2018-08-20 13:30:42

标签: 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();
  }
}

编译时会显示:

incompatible types: Object cannot be converted to String
    value = Optional.ofNullable(null).orElse(orelesMethod());

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

谢谢!

3 个答案:

答案 0 :(得分:4)

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

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

value = Optional.<String>ofNullable(null).orElse(orelesMethod());

您可能还想使用orElseGet方法,以便在可选内容包含值时不调用orelesMethod

答案 1 :(得分:0)

字符串是一个对象,但是对象不一定是字符串,因此会出现此错误。试试这个:

public String orelesMethod() {
        return "hello";
    }
    public void test() {
        Object value;
        value = Optional.ofNullable(null).orElse(orelesMethod());
        System.out.println(value);
    }

答案 2 :(得分:-3)

Optional<T>是一种新的(自Java 8起)处理值的方法,该值可能是null

您可以通过调用.get()来获取值。

请注意,在未设置值的情况下调用.get()会引发NoSuchElementException。

请参阅参考资料:Class Optional


编辑:

此外,orElse()的返回值将与您在初始化类时的返回值相同。由于这不是字符串,而是null,因此您不会得到String作为返回值。