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