双检测的空检测

时间:2017-04-17 06:36:46

标签: java methods null double

我使用私人图书馆。其中一个对象有一个传递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说:&#34;运算符!=未定义参数类型double,null。&#34;

3 个答案:

答案 0 :(得分:1)

当方法返回原语double(而不是Double类)时,它永远不会是null。原始值将始终具有其类型的值(即,您不能double d = null;)。

因此,此检查永远不会返回true,并且编译器不允许您执行此操作。

答案 1 :(得分:0)

您的代码的工作变体将是:

{{1}}

但更好的做法是重构方法object.method()以返回“null case”的特定数字 - 示例:在列表中搜索索引的方法 - 返回索引号if found,如果没有找到-1,或者在搜索过程中抛出异常(搜索的空案例)

答案 2 :(得分:0)

library method的签名是:

public V get(Object key,
    boolean updateToMRU)
课程LRUMap<K,V>

中的

返回的值是Double,因此可以为null,但在null测试之前它被取消装箱到double

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

我建议更改此方法的签名以返回Double而不是double,以便保留有关结果是否为null的信息并进行测试。否则,如果NullPointerException返回null,它将抛出get