双方法的零检测



我正在使用私人lib。其中一个对象的方法可以传递双重或空。

我该如何执行:

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说:"操作员!=对于参数类型double,null不确定。"

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

因此,此检查将永远不会返回true,并且编译器不允许您这样做。

库方法的签名是:

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并可以进行测试的信息。否则,如果get返回null。

,它将投掷NullPointerException

代码的工作变体将是:

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

但是,更好的练习是重构方法对象。Method((返回" null Case"的特定号码 - 示例:一种正在搜索列表中的索引的方法 - 返回索引号如果发现,则在搜索期间发现或异常(搜索的无效案例(

,如果找不到-1。

相关内容

  • 没有找到相关文章

最新更新