有没有更好的方法尝试将int转换为可以是或不是整数的字符串?Integer.parseInt(String value)适用于"25"或"019"但不适用于"hello"或"8A".在Java 8中,我们有可选的值,例如:
public static void main(String[] args) {
Optional<Integer> optionalResult = functionThatReturnsOptionalInteger();
Integer finalValue = optionalResult.orElse(0);
System.out.println(finalValue);
}
public static Optional<Integer> functionThatReturnsOptionalInteger() {
Integer[] ints = new Integer[0];
return Stream.of(ints).findAny();
}
Run Code Online (Sandbox Code Playgroud)
您不需要检查空值,因为Optional包装器公开了处理这种情况的有用方法.
但是,如果您想要parseInt一个字符串,可以为null,或者不包含有效整数,则解决方案与以下内容完全相同:
public static Integer parseIntOrDefault(String toParse, int defaultValue) {
try {
return Integer.parseInt(toParse);
} catch (NumberFormatException e) {
return defaultValue;
}
}
Run Code Online (Sandbox Code Playgroud)
如何利用Java 8功能改进这一点,为什么Integer.parseInt()没有重载以在出现错误参数时返回Optional?(或者只是将一个新方法Integer.parseIntOptional()添加到Integer包装器中)
Fel*_*elk 11
有标准库AFAIK不存在这样的事,但你可以写一个解析的方法String为Optional<Integer>这样的:
public static Optional<Integer> parseInt(String toParse) {
try {
return Optional.of(Integer.parseInt(toParse));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
Run Code Online (Sandbox Code Playgroud)
与现在删除的其他答案不同,我认为这与Java向后兼容无关.
因为空Optional表示缺少的值,这意味着该方法实际工作但没有返回结果.
但是,解析hello为整数将不起作用并且必须抛出异常,因为它是错误而不是空结果.请记住,NumberFormatException扩展IllegalArgumentException.
更一般地说,Optional是为了处理可能缺少的值(而不是null用于此),而不是用于错误处理.此外,Optional没有提供任何方式来了解错误是什么以及为什么存在错误.
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |