原始雙
double
作爲原始類型不能保持空值。它只能保持-1.0,0.0,甚至NaN(一個特殊的浮點值,但我不太確定它的行爲)。
因此,您無法檢查原始變量double
變量是否爲空。
反正你可以這樣做:
public static double notNaN(double value, double defaultValue) {
return Double.isNaN(value)? defaultValue: value;
}
在的java.lang.Double中
情況下,如果你的屬性是Double
(這是...的兩倍對象表示),它可以爲空。就在這種情況下,您可以創建一個defaultValue檢查器方法。
public static double notNull(Double doubleObj, double defaultValue) {
return doubleObj == null? defaultValue: doubleObj.doubleValue();
}
// use this way (getPropertyDouble() returns a java.lang.Double)
notNull(myObj.getPropertyDouble(), -1.0);
你的檢查
如果if(o == null)
工作,那是因爲你的JavaØ基本的double轉換爲java.lang.Double中,使一個對象比較(檢查此autoboxed雙爲空...但盒裝原始值始終是存在的對象)。爲對象
檢查值
如果你有一個Double對象,並要檢查它的價值,我應該建議:
doubleObj.equals(Double.valueOf(1.0D));
是:比較
- 使用
equals
:你不想比較對象引用,但是需要對象內部的值。
- 與另一個Double對象進行比較:這就是爲什麼我寫了Double.valueOf(1.0D)來顯式地填充值。
設置屬性
不幸,在Java中的引用傳遞的方法的另一種方法B,以B的沒有簡單的方式執行,如果某些條件大都會。你可以使用反射,但我認爲它是過度的。如果你想要做的是減少你的代碼,那麼使用一些模板機制沒什麼意義。
所以...我想出很簡單:
- 復位相同的值
- 設置默認已知值
在第一種情況 - 「讓價值是「 - 你可以這樣做:
obj.setProperty(notNull(objWrapper.getProperty(), obj.getProperty()));
在這段代碼中你總是設置的值。如果objWrapper有一個空值(或任何你檢查的),設置爲obj的值將是它自己的當前值。
在第二種情況 - 「如果沒有設置好的使用默認」 - 你可以這樣做:
obj.setProperty(notNull(objWrapper.getProperty(), HERE_GOES_YOUR_DEFAULT_VALUE));
請記住,如果你的obj.setProperty是一個對象,你可以使用空,否則你是被迫到一些不變的價值。
我不確定您在空或默認值的情況下要做什麼。你想在默認值的情況下返回null嗎? – nwinkler 2012-02-29 11:34:02
如果他們wrapperObj的值是一個默認值的說-1我不想設置它在obj – Will 2012-02-29 11:42:57
啊,這是有道理的。 – nwinkler 2012-02-29 11:46:53