为什么Integer不解决null String

时间:2013-02-27 15:23:27

标签: java

Integer类包含一些将String转换为Integer的方法:

  1. Integer.parseInt(null);参数:String返回:int,所以我期望当参数为null时抛出NPE

  2. Integer.valueOf(null);参数:String返回:整数,所以我预计当参数为null时,它应该返回null。但这个先决条件是错误的,我问为什么没有这样的方法可以处理这种情况呢?

4 个答案:

答案 0 :(得分:11)

null不是整数的有效表示。 Integer.parseInt()要求解析的字符串是整数的vaild表示。

<强> Integer.parseInt()

  public static int parseInt(String s, int radix)
440                 throws NumberFormatException
441     {
442         if (s == null) {
443             throw new NumberFormatException("null");
444         }

Integer.valueOf(str)] //调用Integer.parseInt(Str)来返回一个Integer实例。

  public static Integer valueOf(String s) throws NumberFormatException
569     {
570         return new Integer(parseInt(s, 10));
571     }

答案 1 :(得分:8)

Sun的实施Integer(long时间之前:))的人可能在编写该方法时没有想到数据库。除了在处理数据库数据时,或者在尝试使用null显式表示“unknown”的极少数情况下,null通常是出现严重错误的迹象。一般来说,一旦出现问题就提出异常是个好主意。 (a Fail fast设计)

如果您曾经花时间寻找C中的分段错误,这是由于字符串值超过您为其提供的内存(然后覆盖了一些程序代码或其他数据),您将非常了解当出现问题时,没有失败是多么糟糕。

从Java 1.0开始,与java中的数据库的交互变得非常普遍,所以你可能会建议应该有一个方法来处理这个问题。 Integer是一个最终的类,所以如果你构建自己的类Integer,你将失去自动装箱,所以这可能需要oracle改变语言。

基本上,你观察到的是现在的样子,而且有人必须付钱给你代码:)

答案 2 :(得分:2)

我可能错了,@ hudi,但这是你在找什么?

public Integer valueOf2( String inputString ) {
    return (inputString == null) ? null : Integer.parseInt(inputString);
}

答案 3 :(得分:0)

@hudi,这个怎么样?

IntegerConverter

我从未使用它,但看起来如果出现转换错误,您可以指定默认值。我知道在你的项目中包含另一个jar只是为了这个很痛苦;如果有标准的东西会很好。