我正在尝试检查输入是否为null,然后输出应为null 或者如果输入是String,那么它应该将其转换为Long
假设输入永远不是" abcd",输入为空或" 12"," 14"等。
以下代码段抛出空指针异常,因为我无法正确使用Java 8 Optional。我可以捕获空指针异常或使用if / else与secondary'?'运算符但是有没有办法用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
} }
答案 0 :(得分:9)
使用map
从Optional<String>
转换为Optional<Long>
:
Optional<String> str = ...;
Optional<Long> num = str.map(Long::valueOf);
如果str
为空,num
也为空。如果str
有值,则num
包含valueOf
的结果。如果Optional<String>
来自其他地方,这将非常有用。制作一个只是为了避免三元运算符是值得怀疑的,但是在这里你可以如何重写你的方法:
public void methodA(String input) {
System.out.println(Optional.ofNullable(input).map(Long::valueOf).orElse(null));
}