2012-02-29 66 views
0

你好,我是後一個更清潔的執行如何檢查一個違約倍值,如-1.0刪除默認雙人或INT

我的字符串實現:

private static String stringNullChecker(String o) 
{ 
    if(o == null || o.equals("?") || o.equals("")) 
    { 
     return null; 
    } 
    else 
    { 
     return o; 
    } 
} 

這樣我就可以只是叫它如下:

obj.setExDestination(stringNullChecker(wrapperObj.getExchange())); 

但是,如果我嘗試與雙打相同,它會拋出一個空指針錯誤。

所以項目正在實施:

 if(doubleNullChecker(wrapperObj.getPrcCcy()) != null) 
    { 
     obj.setSettlCurrFxRate(wrapperObj.getPrcCcy()); 
    } 

但我不得不爲每雙/ int值做這個if語句。這是很多重複的代碼,我想要把它推到它自己的原子函數中,但除了布爾值之外,我不知道乾淨的代碼會是什麼。

基本上我只想設置它的值,如果它有一個非默認值。

+0

我不確定您在空或默認值的情況下要做什麼。你想在默認值的情況下返回null嗎? – nwinkler 2012-02-29 11:34:02

+0

如果他們wrapperObj的值是一個默認值的說-1我不想設置它在obj – Will 2012-02-29 11:42:57

+0

啊,這是有道理的。 – nwinkler 2012-02-29 11:46:53

回答

0

原始雙

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的沒有簡單的方式執行,如果某些條件大都會。你可以使用反射,但我認爲它是過度的。如果你想要做的是減少你的代碼,那麼使用一些模板機制沒什麼意義。

所以...我想出很簡單:

  1. 復位相同的值
  2. 設置默認已知值

在第一種情況 - 「讓價值是「 - 你可以這樣做:

obj.setProperty(notNull(objWrapper.getProperty(), obj.getProperty())); 

在這段代碼中你總是設置的值。如果objWrapper有一個空值(或任何你檢查的),設置爲obj的值將是它自己的當前值。

在第二種情況 - 「如果沒有設置好的使用默認」 - 你可以這樣做:

obj.setProperty(notNull(objWrapper.getProperty(), HERE_GOES_YOUR_DEFAULT_VALUE)); 

請記住,如果你的obj.setProperty是一個對象,你可以使用空,否則你是被迫到一些不變的價值。

+0

你的答案解釋瞭如何檢查與默認值的相等性,但是如果get方法沒有返回默認值,它不能解決僅調用setter方法的問題。 – nwinkler 2012-02-29 11:49:20

+0

沒錯。然後我會添加一個結論。 – helios 2012-02-29 11:53:29