我使用私人图书馆。其中一个对象有一个传递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;
答案 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
。