Подтвердить что ты не робот

Возвращение null в методе, чья подпись говорит return int?

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 здесь?

4b9b3361

Ответ 1

int является примитивным, null - это не значение, которое оно может принимать. Вы можете изменить возвращаемый тип метода, чтобы вернуть java.lang.Integer, а затем вы можете вернуть значение null, а существующий код, который возвращает int, получит автобокс.

Нули присваиваются только ссылочным типам, это означает, что ссылка не указывает ни на что. Примитивы не являются ссылочными типами, они являются значениями, поэтому они никогда не устанавливаются в нуль.

Использование обертки объекта java.lang.Integer как возвращаемое значение означает, что вы передаете объект Object, а ссылка на объект может быть нулевой.

Ответ 2

int - это примитивный тип данных. Это не ссылочная переменная, которая может принимать значения null. Вам нужно изменить тип возвращаемого метода в класс оболочки Integer.

Ответ 3

Тип 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
  }

Ответ 4

Измените тип возврата на java.lang.Integer. Таким образом, вы можете безопасно вернуть ноль

Ответ 5

Вы действительно хотите вернуть null? Что-то, что вы можете сделать, это, возможно, инициализировать сохраненную клавишу с 0 значением и возвращать 0 как нулевое значение. Это может быть проще.