猿问

封装Integer.parseInt()的好方法

封装Integer.parseInt()的好方法

我有一个项目,我们经常使用它将Integer.parseInt()String转换为int。当出现问题时(例如,String不是数字而是字母a或其他),此方法将引发异常。但是,如果我必须在我的代码中处理各种异常,那么这很快就会变得非常丑陋。我想把它放在一个方法中,但是,我不知道如何返回一个干净的值来表明转换出错了。

在C ++中,我可以创建一个接受指向int的指针的方法,让方法本身返回true或false。但是,据我所知,这在Java中是不可能的。我还可以创建一个包含true / false变量和转换值的对象,但这似乎也不理想。对于全局值也是如此,这可能会给我带来一些多线程的麻烦。

那么有一个干净的方法吗?


阿波罗的战车
浏览 725回答 3
3回答

翻过高山走不出你

你可以返回一个Integer而不是一个int,返回null解析失败。遗憾的是,如果没有内部抛出的异常,Java没有提供这样做的方法 - 您可以隐藏异常(通过捕获并返回null),但如果您解析数百个,它仍然可能是性能问题数千位用户提供的数据。编辑:这种方法的代码:public static Integer tryParse(String text) {   try {     return Integer.parseInt(text);   } catch (NumberFormatException e) {     return null;   }}请注意,如果text为null ,我不确定这会做什么。您应该考虑 - 如果它代表一个错误(即您的代码可能传递无效值,但永远不应传递null),那么抛出异常是合适的; 如果它不代表一个bug,那么你应该像对任何其他无效值一样返回null。最初这个答案使用了new Integer(String)构造函数; 它现在使用Integer.parseInt和拳击操作; 以这种方式,小值将最终被装箱到缓存Integer对象,使其在这些情况下更有效。

千万里不及你

当它不是数字时,你期望什么行为?例如,如果您在输入不是数字时经常使用默认值,那么这样的方法可能很有用:public static int parseWithDefault(String number, int defaultVal) {   try {     return Integer.parseInt(number);   } catch (NumberFormatException e) {     return defaultVal;   }}当无法解析输入时,可以为不同的默认行为编写类似的方法。

jeck猫

在某些情况下,您应该将解析错误视为快速失败的情况,但在其他情况下,例如应用程序配置,我更喜欢使用Apache Commons Lang 3 NumberUtils处理缺省值的输入。int port = NumberUtils.toInt(properties.getProperty("port"), 8080);
随时随地看视频慕课网APP

相关分类

Java
我要回答