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;
}
}
La méthode se situe dans une classe qui est une extension de TreeMap, si cela fait une différence ... Des idées pour lesquelles je ne peux pas renvoyer null ici?
int
est une primitive, null n'est pas une valeur qu'il peut prendre. Vous pouvez changer le type de retour de la méthode pour renvoyer Java.lang.Integer
et vous pouvez ensuite renvoyer null et le code existant qui renvoie int sera automatiquement remplacé.
Les valeurs Null sont attribuées uniquement aux types de référence, cela signifie que la référence ne pointe vers rien. Les primitives ne sont pas des types de référence, ce sont des valeurs, elles ne sont donc jamais définies sur null.
Utiliser l'encapsuleur d'objet Java.lang.Integer comme valeur de retour signifie que vous renvoyez un objet et que la référence de l'objet peut être null.
int
est un type de données primitif. Ce n'est pas une variable de référence pouvant prendre null
valeurs. Vous devez changer le type de retour de la méthode en Integer
wrapper.
Le type int
est une primitive et il ne peut s'agir de null
, si vous voulez renvoyer null
, marquez la signature comme
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
}