【发布时间】:2016-12-13 03:44:31
【问题描述】:
我正在尝试检查输入是否为空,那么输出应该为空 或者如果输入是字符串,那么它应该将其转换为 Long
假设输入永远不是“abcd”,输入要么为空,要么为“12”、“14”等。
以下代码 sn-p 抛出空指针异常,因为我无法正确使用 Java 8 Optional。我可以捕获空指针异常或使用 if/else with tertiary'? operator 但是有什么办法可以用 Optional 来处理这种情况吗?
public class OptionalClass {
public void methodA(String input) {
System.out.println(Long.valueOf(Optional.ofNullable(input).orElse(null)));
}
public static void main(String[] args) {
new OptionalClass().methodA("12");// This works fine
new OptionalClass().methodA(null); // This throws null pointer exception
} }
【问题讨论】:
-
为什么你要使用可选的?我认为您的情况没有任何用处
-
这并不是
Optional的真正用途。而且你不想被 NPE 抓到。只需使用第三个,虽然更好的设计是说合同根本不允许 null - 然后抛出 NPE 是应该发生的并且自动发生并且您的代码要简单得多。 -
不是
ternary吗? :-) IMO 在您的情况下无需使用 Optional 。像input != null ? Long.valueOf(input) : null这样的东西似乎还可以。 @pvg 说的也有道理。