一尘不染

Java封装Integer.parseInt()的好方法

java

我有一个项目,我们经常在其中Integer.parseInt()将String转换为int。当出现问题时(例如,String不是数字,而是字母a,等等),此方法将引发异常。但是,如果我必须到处都处理代码中的异常,这很快就会变得非常难看。我想将其放在一个方法中,但是,我不知道如何返回一个干净的值以表明转换出错。

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

那么有没有一种干净的方法可以做到这一点?


阅读 1042

收藏
2020-03-13

共1个答案

一尘不染

你可以返回Integer而不是,以在解析失败时int返回null。

遗憾的是,Java没有提供一种没有内部抛出异常的方法来执行此操作-你可以隐藏该异常(通过捕获该异常并返回null),但是如果你要解析数百个异常,它仍然可能是性能问题用户提供的数以千计的数据。

编辑:这种方法的代码:

public static Integer tryParse(String text) {
  try {
    return Integer.parseInt(text);
  } catch (NumberFormatException e) {
    return null;
  }
}

请注意,如果不确定text为null ,我不确定该怎么办。你应该考虑-如果它代表一个错误(即你的代码很可能传递了一个无效值,但决不应该传递null),则抛出异常是适当的;如果它不表示错误,则可能应该返回null,就像返回其他任何无效值一样。

最初,这个答案使用了new Integer(String)构造函数。现在使用Integer.parseInt和拳击操作;这样,小的值最终将被装箱到缓存的Integer对象中,从而使其在这种情况下更加有效。

2020-03-13