为了账号安全,请及时绑定邮箱和手机立即绑定

封装Integer.parseInt()的好方法

封装Integer.parseInt()的好方法

阿波罗的战车 2019-08-28 09:04:30
封装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对象,使其在这些情况下更有效。


查看完整回答
反对 回复 2019-08-28
?
千万里不及你

TA贡献1784条经验 获得超9个赞

当它不是数字时,你期望什么行为?

例如,如果您在输入不是数字时经常使用默认值,那么这样的方法可能很有用:

public static int parseWithDefault(String number, int defaultVal) {
  try {
    return Integer.parseInt(number);
  } catch (NumberFormatException e) {
    return defaultVal;
  }}

当无法解析输入时,可以为不同的默认行为编写类似的方法。


查看完整回答
反对 回复 2019-08-28
?
jeck猫

TA贡献1909条经验 获得超7个赞

在某些情况下,您应该将解析错误视为快速失败的情况,但在其他情况下,例如应用程序配置,我更喜欢使用Apache Commons Lang 3 NumberUtils处理缺省值的输入。

int port = NumberUtils.toInt(properties.getProperty("port"), 8080);


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 707 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信