如何改进这种Java方法?

时间:2011-04-05 14:02:53

标签: java performance

我正在解析XML文件,我有几种方法类似于:

public static Integer getInteger(Object integer) {
  if (integer == null) {
     return 0;
  }

  try {
     return Integer.parseInt(integer.toString(), 10);
  } catch (Exception ex) {
     return 0;
  }
}

所以基本上,你传递一个对象,假设将它转换为整数(我也有Float的版本等)。

这似乎运作良好,但作为Java新手,我想知道如何改进它。我在装箱/拆箱方面特别有趣(至少从C#开发者的角度来看)。

由于

修改

抱歉,我不清楚该方法的内容。是的,它现在是一个XML文件所以它总是一个字符串。但字符串可能是空的,甚至可能为空。我想如果出现任何错误,我想总是返回0.

6 个答案:

答案 0 :(得分:5)

通常不应该抓住Exception。在这里捕捉NumberFormatException会更合适。

转换为Integer而不是int的任何理由?为什么不让调用者执行装箱转换如果他们需要它?

答案 1 :(得分:2)

你应该使用instanceof运算符,然后进行安全转换(所以如果Object整数是instanceof Integer,则抛出它)。

然后你不必捕获异常(在这种情况下是未经检查的NumberFormatException)

    public static Integer getInteger(Object integer) {
      if (integer == null) {
         return 0;
      }
      if (integer instanceof Integer) {
         return (Integer)integer;
      }
      return 0;
    }

修改

如果数据来自XML,那么它当然永远不会是Integer :)然后仍然需要从String解析,所以请看其他答案。

答案 2 :(得分:2)

您没有说明integer是否是Integer的实例。如果它是你可以投下它:

Integer i = (Integer) integer;

首先检查了nullinstanceof

如果它不是Integer的实例,那么你所做的事情似乎是合理的,尽管你只需要抓住NumberFormatException

答案 3 :(得分:1)

正如Jon暗示的那样,返回int(原始数据类型)而不是Integer(包装类)可能会更好(假设您永远不想返回null)。< / p>

此外,当输入通常是Integer对象或其他Number子类(我正在调用输入input时,添加此代码可能是一种快捷方式,因为它太混乱了):

if (input instanceof Number) {
  return ((Number) integer).intValue();
}

答案 4 :(得分:0)

如果您想要发信号,那么返回Integer是有意义的。您已经对此进行了测试,但您不应该返回0,除非您有一个非常明确且有些特殊的要求。 无价值不等于0

答案 5 :(得分:0)

此外,除了null之外,您还可以添加更多特殊情况,例如检查空字符串:

public static Integer getInteger(Object integer) {
    if (integer == null) {
        return 0;
    }
    try {
        String s = integer.toString();
        if (s.isEmpty())
             return 0;
        return Integer.parseInt(s, 10);
    } catch (Exception ex) {
        return 0;
    }
}

另一方面,您可以剪切所有特殊情况,并仅使用:

public static Integer getInteger(Object integer) {
    try {
        return Integer.parseInt(integer.toString(), 10);
    } catch (Exception ex) {
        return 0;
    }
}

最后,性能增益(或损失)取决于输入数据的哪个部分是null,空的,不可解析的整数或“正常”整数字符串。