代码之家  ›  专栏  ›  技术社区  ›  ratzip

在Java中使用可选类时,不能将对象转换为字符串

  •  0
  • ratzip  · 技术社区  · 7 年前

    我有以下代码试图使用可选类:

    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 回复  |  直到 7 年前
        1
  •  6
  •   awesoon    7 年前

    你已经定义了 value 类型 String Optional.ofNullable(null) 回报 Optional<Object> 因为任何对象类型都可以是 null 而且您没有指定实际的类型。然后你打电话来 orElse 关于类型的对象 可选对象; 因为 T Object ,和 奥利斯 对象 字符串 .

    ofNullable :

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

    orElseGet 方法以便不调用 orelesMethod

        2
  •  0
  •   Abhishek_Mishra    7 年前

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

    public String orelesMethod() {
            return "hello";
        }
        public void test() {
            Object value;
            value = Optional.ofNullable(null).orElse(orelesMethod());
            System.out.println(value);
        }
    
        3
  •  -3
  •   Christian Hoffmann    7 年前

    Optional<T> null .

    你通过打电话得到价值 .get()

    注意,打电话 .get() 如果不设置值,则抛出NoSuchElementException。

    Class Optional


    编辑:

    另外,您的 orElse() 将与初始化类的时间相同。因为那不是一根弦而是 你不会得到一个字符串作为返回。