2013-02-27 44 views
3

Integer类包含一些方法来字符串转换成整数:为什么整数不能解决空字符串

  1. Integer.parseInt(null);参数:字符串返回:整型,所以我预计,当参数为null,该抛NPE

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

+0

Javadoc说:“NumberFormatException - 如果字符串不包含可分析的整数”。这是你得到的? – 2013-02-27 15:26:38

+0

这不是您通常需要依赖的行为(对null参数返回null),所以它通常不是问题。如果您确实需要依赖它,只需创建一个包装它并以所需方式处理null的实用程序方法? – berry120 2013-02-27 15:26:44

+0

@EdwinDalorzo nope。我的问题是为什么有一些可以用空字符串处理的新方法。如果(value == null)返回null else retun valueOf(value),那么创建如此困难? – hudi 2013-02-27 15:29:32

回答

7

在太阳谁实施整型(一long很久以前:))时,他们写道,方法可能是没有想到的数据库中的人。除了在处理数据库数据时,或者极少数情况下,您试图用null显式表示“unknown”时,null通常表示某些事情已经发生了严重错误。总的来说,一旦出现问题,立即提出例外是个好主意。 (a Fail fast设计)

如果您曾经花时间在C中查找由于字符串值超过您为其提供的内存(然后重写了某些程序代码或其他数据)的分段错误,您将对于出现问题时不失败是多么糟糕有非常好的评价。

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

基本上,你观察到的是,现在是路,有人将不得不支付你周围代码:)

11

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

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)] //哪个inviokes的Integer.parseInt(STR)返回整数实例。

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

我不同意我使用整数,因为我需要处理空值。当我不想要我使用int – hudi 2013-02-27 15:25:36

+4

...你不同意java规格? – 2013-02-27 15:27:05

+1

我想什么PremGenError意味着整数是数学实体,而不是'Integer'类的对象。 :) – asteri 2013-02-27 15:27:19

2

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

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

是啊我在评论中写这个,但我的问题是为什么Integer类中没有这样的方法? – hudi 2013-02-27 15:36:02

0

@hudi,这个怎么样?

IntegerConverter

我从来没有使用过它,但它看起来像如果有一个转换错误,您可以指定一个默认值。我知道,为了这个,在项目中加入另一个jar是一件很痛苦的事情;如果有标准的话会很好。

相关问题