我遇到了这样的情况,我需要将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;
}
谷歌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()
是否会抛出异常。因此,我唯一的行动方案似乎就是调用它并捕获异常。
用于parseInt
的javadoc帮助不大。
以下是我想知道的具体问题:
Integer.parseInt()
在调用之前是否会抛出一个NumberFormatException
?AWTEvent.consume()
的东西。如果是,那么我将这样做,这样谷歌CodePro就不会将其视为“未记录”。发布于 2010-12-10 23:19:46
遗憾的是,没有。至少在核心Java API中没有。然而,编写一个很容易-只需修改以下代码即可。
如果你没有捕捉到异常,那么堆栈将会展开,直到它遇到一个将处理它的catch块,或者它将完全展开并停止线程。变量实际上不会被赋值,但这并不是您想要的。
也许有一种方法可以告诉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;
}
}
发布于 2010-12-10 23:07:33
在commons lang中有一个NumberUtils.toInt(String, int),它可以做你想要做的事情。
NumberUtils.toInt("123", 42) ==> 123
NumberUtils.toInt("abc", 42) ==> 42
发布于 2010-12-10 23:25:21
* Is there a way to mark the exception somehow explicitly that I don't care about it? I'm thinking this would be something similar to AWTEvent.consume(). If so, then I will do this so that Google CodePro doesn't see this as "unlogged".
可以,您可以在本地禁用一行代码的CodePro审计规则:
http://code.google.com/javadevtools/codepro/doc/features/audit/locally_disabling_audit_rules.html
也就是说,不一定要在每个异常捕获块中包含诊断日志记录。有时,最好的做法是选择默认课程。有时,它是为了与用户交互。那得看情况。
https://stackoverflow.com/questions/4410107
复制相似问题