什么是预期的时候处理NumberFormatException的正确方法是什么?

我遇到这种情况,我需要将a解析String为an

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块为止,否则它将完全展开并停止线程。实际上,不会分配该变量,但这并不是您想要的。

  • 有没有办法以某种方式明确标记我不关心的异常?我想这将类似于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;

}

}

以上是 什么是预期的时候处理NumberFormatException的正确方法是什么? 的全部内容, 来源链接: utcz.com/qa/410103.html

回到顶部