封装Integer.parseInt()的好方法我有一个项目,我们经常使用它将Integer.parseInt()String转换为int。当出现问题时(例如,String不是数字而是字母a或其他),此方法将引发异常。但是,如果我必须在我的代码中处理各种异常,那么这很快就会变得非常丑陋。我想把它放在一个方法中,但是,我不知道如何返回一个干净的值来表明转换出错了。在C ++中,我可以创建一个接受指向int的指针的方法,让方法本身返回true或false。但是,据我所知,这在Java中是不可能的。我还可以创建一个包含true / false变量和转换值的对象,但这似乎也不理想。对于全局值也是如此,这可能会给我带来一些多线程的麻烦。那么有一个干净的方法吗?
3 回答
翻过高山走不出你
TA贡献1875条经验 获得超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
对象,使其在这些情况下更有效。
千万里不及你
TA贡献1784条经验 获得超9个赞
当它不是数字时,你期望什么行为?
例如,如果您在输入不是数字时经常使用默认值,那么这样的方法可能很有用:
public static int parseWithDefault(String number, int defaultVal) { try { return Integer.parseInt(number); } catch (NumberFormatException e) { return defaultVal; }}
当无法解析输入时,可以为不同的默认行为编写类似的方法。
jeck猫
TA贡献1909条经验 获得超7个赞
在某些情况下,您应该将解析错误视为快速失败的情况,但在其他情况下,例如应用程序配置,我更喜欢使用Apache Commons Lang 3 NumberUtils处理缺省值的输入。
int port = NumberUtils.toInt(properties.getProperty("port"), 8080);
添加回答
举报
0/150
提交
取消