public int pollDecrementHigherKey(int x) {
int savedKey, savedValue;
if (this.higherKey(x) == null) {
return null; // COMPILE-TIME ERROR
}
else if (this.get(this.higherKey(x)) > 1) {
savedKey = this.higherKey(x);
savedValue = this.get(this.higherKey(x)) - 1;
this.remove(savedKey);
this.put(savedKey, savedValue);
return savedKey;
}
else {
savedKey = this.higherKey(x);
this.remove(savedKey);
return savedKey;
}
}
该方法位于一个类,它是TreeMap的扩展,如果这有任何区别......任何想法为什么我不能在这里返回null?
答案 0 :(得分:49)
int
是一个原语,null不是它可以承担的值。您可以将方法返回类型更改为返回java.lang.Integer
,然后您可以返回null,并且返回int的现有代码将自动进行生成。
Null仅分配给引用类型,这意味着引用不指向任何内容。基元不是引用类型,它们是值,因此它们永远不会设置为null。
使用对象包装器java.lang.Integer作为返回值意味着您要传回一个Object,并且对象引用可以为null。
答案 1 :(得分:2)
int
是原始数据类型。它不是可以采用null
值的引用变量。您需要将方法返回类型更改为Integer
包装类。
答案 2 :(得分:0)
类型int
是基元,如果您想要返回null
,则不能是null
,将签名标记为
public Integer pollDecrementHigherKey(int x){
x = 10;
if(condition){
return x; // this is autoboxing, x will be automatically converted to Integer
}else if(condition2){
return null; // Integer referes to Object, so valid to return null
}else{
return new Integer(x); // manually created Integer from int and then return
}
return 5; // also will be autoboxed and converted into Integer
}
答案 3 :(得分:0)
将返回类型更改为java.lang.Integer。这样您就可以安全地返回null
答案 4 :(得分:-2)
你真的想要返回null吗?你可以做的事情,可能是使用0值初始化savedkey并返回0作为空值。它可以更简单。