我正在使用私人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"的特定号码 - 示例:一种正在搜索列表中的索引的方法 - 返回索引号如果发现,则在搜索期间发现或异常(搜索的无效案例(