有时我必须在方法中返回一些“Object”(不是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);
}
}
如果我们看看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
orElse
的工作原理是,如果Optional
为空,则返回默认值。如果Optional
不为空,则返回其包含的值。
在这种情况下,您使用的默认值是null
。它可能是任何String
,例如"NOT FOUND"
。