2016-05-25 73 views
-2

下面的列名稱是double類型。Field.set返回Java中的空字符串

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

最後一行拋出「空字符串」

的例外,我需要在T插入空字符串,其中我試圖插入空字符串列的類型爲double。任何人都可以幫助並提供替代方案

+0

你覺得把一個空的''字符串'放入''Double''字段應該如何工作? – f1sh

+0

我怎樣才能在該領域沒有任何顯示。設置null會拋出double不能設爲null的異常 – user3274263

+0

你不能? 'double'需要有價值。未初始化的雙打被設置爲默認值「0.0」。如果你可以控制'columnName',你可以使它成爲'Double'而不是'double'(對象而不是primative),它被允許爲空。 – Ironcache

回答

2

您不能在基元上設置空值或空值。如果您絕對需要將其設置爲空,然後更改字段的數據類型java.lang.Double中,然後調用t.set(this, null)

失敗是由於您嘗試解析「」作爲一個雙,而不是由造成值正在設置。

+0

它說不能將雙字段設置爲空值 – user3274263

+0

是的,沒錯。如果你想設置null,那麼使該字段的類型爲java.lang.Double(包裝類型),而不是「double」 –

0

parseDouble返回字符串的一個基本的double包含值:

返回一個新的雙初始化爲指定String表示的值,如由類Double的valueOf方法。

異常的原因:

拋出:

NullPointerException - 如果字符串爲null

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

的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並且該字段爲實例f ield。

,所以你可以使用它:

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

他想將字段設置爲「null」,而不是「 '0''。對於基元來說這是不可能的。 – f1sh

0

String是錯誤的方式去這裏。您想將值設置爲null,這基本上意味着「沒有價值」。

使用此:

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

請注意,如果您的字段的類型是Double,不double這隻會工作。

double是一種原始類型,因此沒有真正的表示「無值」的方式。對象不是原語,而是對象。因此,他們可以設置爲null,這是你想要的。