2017-04-17 75 views
0

我正在使用一個私有庫。其中一個對象具有傳遞double或null的方法。雙重方法的空檢測

我怎麼能執行:

if (object.method != null) { 
    // do some numeric operations with the returned value 
} 

其他細節:

library = org.apache.commons.collections4.map 
class = LRUmap 
method = get 

我的代碼是:

public class ExampleNode extends GeneralNode { 
    private LRUMap<Integer, Double> cache; 

    public ExampleNode() { 
     this.setCache(new LRUMap<Integer,Double>(100)); 
    }  

    public void setCache(LRUMap<Integer, Double> lruMap) { 
     this.cache = lruMap; 
    } 

    public double getDatumCacheDebug(int llave){ 
     return this.cache.get((Object)llave,false); 
    } 
} 

然後我打電話:

//outside ExampleNode 
    if (actualNode.getDatumCacheDebug(k) != null) { 

Eclipse Neon3說:「運算符!=未定義爲參數類型(s)double,null。」

+3

嗨,請顯示可返回double或null的方法的類型簽名。在Java中,不可能聲明一個可以返回'double'或'null'的方法。可以聲明一個返回一個'Double'的方法 - 它也可以返回一個'null'。但是你不會得到你聲明的返回一個'Double'的方法所描述的錯誤。 –

+1

它應該是0,而不是空,因爲它是一個基本類型,而不是引用類型 – abcOfJavaAndCPP

+0

哦~~ 庫= org.apache.commons.collections4.map 類= LRUmap 包含method = get –

回答

0

library method的簽名是:

public V get(Object key, 
    boolean updateToMRU) 

LRUMap<K,V>

返回的值是一個Double,因此可以爲空,但空測試之前被拆箱到double

public double getDatumCacheDebug(int llave){ 
    return this.cache.get((Object)llave,false); 
} 

我建議更改簽名此方法返回Double而不是double,以便有關結果是否爲null的信息將被保留並可以進行測試。否則,如果get返回null,它將拋出NullPointerException

+0

它的工作! 感謝:-) –

1

當該方法返回一個基元double(而不是Double類)時,它永遠不會是null。原始值將始終具有其類型的值(即,您不能執行double d = null;)。

因此,此檢查永遠不會返回true,編譯器不允許您這樣做。

0

你的代碼的工作變型將是:

if (object.method != 0) { 
    // do some numeric operations with the returned value 
} 

但更好的做法是重構你的方法的object.method()返回一個特定的編號爲您的「零案件」 - 例如:一在列表中搜索索引的方法 - 如果找到,則返回索引編號,如果未找到則返回-1,或者在搜索期間拋出異常(搜索時爲空)