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

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

我找不到它是什么问题,有人可以帮忙吗?


紫衣仙女
浏览 820回答 3
3回答

心有法竹

您已定义value为 type&nbsp;String,但Optional.ofNullable(null)返回,Optional<Object>因为任何对象类型都可以,null而您没有指定实际类型。然后您正在调用orElse类型的对象,Optional<Object>因为T是Object,该orElse方法返回一个Object无法转换为类型的对象String。因此,您需要在调用时指定类型ofNullable:value&nbsp;=&nbsp;Optional.<String>ofNullable(null).orElse(orelesMethod());您可能还想使用orElseGetmethod 以便orelesMethod在可选项包含值时不调用。

aluckdog

一个字符串是一个对象,但一个对象不一定是一个字符串,因此这个错误。试试这个 :public String orelesMethod() {&nbsp; &nbsp; &nbsp; &nbsp; return "hello";&nbsp; &nbsp; }&nbsp; &nbsp; public void test() {&nbsp; &nbsp; &nbsp; &nbsp; Object value;&nbsp; &nbsp; &nbsp; &nbsp; value = Optional.ofNullable(null).orElse(orelesMethod());&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(value);&nbsp; &nbsp; }

沧海一幻觉

Optional<T>是处理值的新方法(自 Java 8 起),可能是null.您可以通过调用获取值.get()。请注意,.get()在未设置值的情况下调用会引发 NoSuchElementException。编辑:此外,您的orElse()will的返回值与您初始化类的时间相同。因为那不是一个字符串,但null你没有得到一个字符串作为回报。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java