为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2021-07-29 09:17:06
我有以下代码试图使用 Optional 类:import java.util.Optional;// one class needs to have a main() methodpublic 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 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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

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

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

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


查看完整回答
反对 回复 2021-08-04
?
aluckdog

TA贡献1847条经验 获得超7个赞

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


public String orelesMethod() {

        return "hello";

    }

    public void test() {

        Object value;

        value = Optional.ofNullable(null).orElse(orelesMethod());

        System.out.println(value);

    }


查看完整回答
反对 回复 2021-08-04
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

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

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

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

编辑:

此外,您的orElse()will的返回值与您初始化类的时间相同。因为那不是一个字符串,但null你没有得到一个字符串作为回报。


查看完整回答
反对 回复 2021-08-04
  • 3 回答
  • 0 关注
  • 819 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信