Field.set在Java中返回空字符串

时间:2016-05-25 13:51:19

标签: java string exception-handling

下面的列名是double类型。

Class c = this.getClass();
Field t = c.getDeclaredField(columnName);
t.setDouble(this,Double.parseDouble(""));

最后一行抛出"空字符串"

的异常

我需要在t中插入空字符串,我尝试插入空字符串的列是Double类型。任何人都可以提供帮助并提供替代方案吗?

3 个答案:

答案 0 :(得分:2)

您无法在基元上设置空值或null。如果绝对需要将其设置为null,则将字段的数据类型更改为java.lang.Double,然后调用t.set(this, null)

失败是由您尝试解析""作为一个双倍,而不是被设定的值。

答案 1 :(得分:0)

parseDouble返回包含字符串值的基元double:

  

返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行。

例外的原因:

  

抛出:

     

NullPointerException - 如果字符串为null

     

NumberFormatException - 如果字符串不包含可解析的double。

Javadoc是你的朋友:https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#parseDouble(java.lang.String)

对于您的问题,如果您花时间阅读javadoc https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Field.html#setDouble(java.lang.Object,%20double)

您可以看到此方法(setDouble)

  

抛出:

     

NullPointerException - 如果指定的对象为null且该字段是实例字段。

所以你可以使用它:

Double d = Double.valueOf("0.0");
t.set(this,d);

答案 2 :(得分:0)

String是错误的方式。您希望将值设置为null,这基本上意味着"没有值"。

使用此:

Class c = this.getClass();
Field t = c.getDeclaredField(columnName);
t.set(this, null);

请注意,这仅适用于您的字段类型为Double而非double的情况。

double是一种原始类型,因此,没有真正的方式来表示"没有价值"。 Double个对象不是原始对象,而是对象。因此,它们可以设置为null,这就是您想要的。