gpt4 book ai didi

java - 在预期的情况下处理 NumberFormatException 的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 22:39:16 25 4
gpt4 key购买 nike

我遇到了这种情况,我需要将 String 解析为 int 并且我不知道如何处理 NumberFormatException。当我没有捕捉到它时,编译器不会提示,但我只是想确保我正确地处理了这种情况。

private int getCurrentPieceAsInt() {
int i = 0;
try {
i = Integer.parseInt(this.getCurrentPiece());
} catch (NumberFormatException e) {
i = 0;
}
return i;
}

我只想像这样简化我的代码。编译器对此没有问题,但线程在 NumberFormatException 上终止。

private int getCurrentPieceAsInt() {
int i = 0;
i = Integer.parseInt(this.getCurrentPiece());
return i;
}

Google CodePro 希望我以某种方式记录异常,我同意这是最佳做法。

private int getCurrentPieceAsInt() {
int i = 0;
try {
i = Integer.parseInt(this.getCurrentPiece());
} catch (NumberFormatException e) {
i = 0;
e.printStackTrace();
}
return i;
}

我希望此方法在当前片段不是数字或无法解析时返回 0。当我没有显式捕获 NumberFormatException 时,它不会分配变量 i 吗?还是 Integer.parseInt() 返回一些默认值?

一般风格说,如果我捕获到异常,我应该将它记录在某个地方。我不想记录它。有时抛出此异常是正常操作,这也不适合我。但是,我找不到一个函数来告诉我 Integer.parseInt() 是否会抛出异常。所以我唯一的行动方针似乎就是调用它并捕获异常。

javadoc对于 parseInt 帮助不大。

以下是我想知道的具体问题:

  • 有没有我可以调用的方法,它会告诉我 Integer.parseInt() 在调用它之前是否会抛出 NumberFormatException?这样我就可以毫无问题地记录它,因为它永远不会发生。
  • 如果我只是不捕获异常,是否不会分配值?然后,当它不是数字时,我将简单地将其初始化为我想要的值,并且不会捕获异常。
  • 有没有办法以某种方式明确地标记我不关心的异常?我认为这类似于 AWTEvent.consume()。如果是这样,那么我会这样做,这样 Google CodePro 就不会将其视为“未记录”。

最佳答案

  • 有没有我可以调用的方法,它会告诉我 Integer.parseInt() 在调用它之前是否会抛出 NumberFormatException?这样我就可以毫无问题地记录它,因为它永远不会发生。

很遗憾,没有。至少不在核心 Java API 中。编写一个很容易,但是 - 只需修改下面的代码。

  • 如果我只是不捕获异常,是否不会分配值?然后,当它不是数字时,我将简单地将其初始化为我想要的值,并且不会捕获异常。

如果您没有捕获异常,那么堆栈将展开,直到它遇到将处理它的 catch block ,或者它会完全展开并停止线程。实际上,该变量不会被分配,但这并不是您想要的。

  • 有没有办法以某种方式明确地标记我不关心的异常?我认为这类似于 AWTEvent.consume()。如果是这样,那么我会这样做,这样 Google CodePro 就不会将其视为“未记录”。

可能有一种方法可以告诉 CodePro 忽略这个特定的警告。当然,使用 FindBugs 和 Checkstyle 等工具,您可以关闭特定位置的警告。 (编辑:@Andy 已经指出了如何做到这一点。)

我怀疑您想要的是@daveb 提到的 Commons lang 包之类的东西。编写这样的函数非常容易:

int parseWithDefault(String s, int def) {
try {
return Integer.parseInt(s);
}
catch (NumberFormatException e) {
// It's OK to ignore "e" here because returning a default value is the documented behaviour on invalid input.
return def;
}
}

关于java - 在预期的情况下处理 NumberFormatException 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com