将Java作为另一种类型返回(取消装箱)

时间:2018-02-01 13:46:45

标签: java optional

有时我必须返回一些"对象" (在方法中不是可选的,以保持向后兼容性),返回值是Optional。

这个例子似乎有用(它编译并没有给出错误),但我对此感到不舒服。有人可以解释为什么这有效并且符合这是正确的吗?

package com.test;

import java.util.Optional;

public class Main {

    public static void main(String[] args) {
        Main main = new Main();
        String result = main.WorkingWithOptional();
        // yes, I know, an Optional here would be better and cleaner.
        if (result != null)
            System.out.println(result);
        else
            System.out.println("RESULT IS NULL");
    }

    public String WorkingWithOptional() {
        Optional<String> res = Optional.of("Test");

        return res.orElse(null);
    }
}

2 个答案:

答案 0 :(得分:2)

orElse的工作原理是,如果Optional为空,则需要返回默认值。如果Optional不为空,则返回其包含的值。

在这种情况下,您使用的默认值为null。它可以是任何String例如"NOT FOUND"

答案 1 :(得分:1)

如果我们查看java doc Optional#orElse(T other)

  

如果存在则返回值,否则返回其他

在你的情况下

 Optional<String> res = Optional.of("Test");

res.get()res.orElse()将始终返回"Test"字符串。 您可以将Optional视为值的包装器。它可能包含值,也可能不包含值。

Optional op = Optional.ofNullable(null); // empty
System.out.println(op.orElse("default value")); // "default value"
op.get();// will produce NoSuchElementException, becase it is empty