下面的列名是double类型。
Class c = this.getClass();
Field t = c.getDeclaredField(columnName);
t.setDouble(this,Double.parseDouble(""));
最后一行抛出"空字符串"
的异常我需要在t中插入空字符串,我尝试插入空字符串的列是Double类型。任何人都可以提供帮助并提供替代方案吗?
答案 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
,这就是您想要的。