1. ホーム
  2. java

[解決済み] シグネチャがreturn intであるメソッドでnullを返す?

2022-03-03 04:31:28

質問

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を返せないのか、何かアイデアはありますか?

解決方法は?

int はプリミティブなので、null は取ることのできる値ではありません。メソッドの戻り値の型を変更して java.lang.Integer で、NULLを返せば、intを返す既存のコードはautoboxされます。

Nullは参照型にのみ割り当てられ、その参照は何も指していないことを意味します。プリミティブは参照型ではなく、値なので、NULLに設定されることはありません。

オブジェクトラッパーである java.lang.Integer を戻り値として使用することは、オブジェクトを渡すことを意味し、オブジェクトの参照は null である可能性があります。