8

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

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

  2. Integer.valueOf(null);参数:字符串返回:整数,所以我希望当参数为空时,这应该返回空。但是这个前提是错误的,我问为什么没有这样的方法可以处理这种情况?

4

4 回答 4

11

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

整数.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     }
于 2013-02-27T15:24:53.400 回答
9

Sun 中实现 Integer 的人(long不久前 :))在编写该方法时可能没有考虑数据库。除非在处理数据库数据时,或者在极少数情况下您试图用 null 显式表示“未知”,否则 null 通常是出现严重错误的迹象。一般来说,一旦出现问题就提出异常是个好主意。(快速失败设计)

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

自 Java 1.0 以来,Java 中与数据库的交互变得非常普遍,因此您建议应该有一种方法来处理这种情况可能是正确的。Integer 是最终类,因此如果您构建自己的 Integer 类,您将失去自动装箱,因此这可能确实需要通过 oracle 更改语言。

基本上,您观察到的是目前的情况,有人将不得不付钱给您以围绕它进行编码:)

于 2013-02-27T15:40:07.797 回答
3

我可能是错的,@hudi,但这就是你要找的吗?

public Integer valueOf2( String inputString ) {
    return (inputString == null) ? null : Integer.parseInt(inputString);
}
于 2013-02-27T15:34:52.947 回答
0

@hudi,这个呢?

整数转换器

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

于 2013-02-27T15:53:03.500 回答