2013-06-20 16 views
25
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を返すことはできません。シグネチャがreturn intを返すメソッドでnullを返しますか?

+7

'null'は' int'ではないので、 –

+1

どのような言語ですか?より多くのタグを追加pls。 Afaikのみvoid関数はnullを返すことができます。そうでなければ、0または-1が返されます。言語に応じて 'return void';を試してください。 – DanFromGermany

+0

Russel、それは言語に依存しますが、いずれにせよ、答えを回答として投稿して、私たちが望む方向に投票できるようにしてください。 –

答えて

38

intはプリミティブですが、nullは受け入れることができる値ではありません。メソッド戻り値の型を変更してjava.lang.Integerを返し、nullを返すことができ、intを返す既存のコードは自動ボクシングされます。

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

オブジェクトラッパーjava.lang.Integerを戻り値として使用すると、オブジェクトを戻していることを意味し、オブジェクト参照は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 
    } 
+0

あなたはどのような言語を想定していますか? –

+1

@Jeppe:私はC#またはJavaを推測しています。どちらもプリミティブ、オブジェクトラッパー、オートボックスを持っています。 –

0

タイプintは原始的であり、あなたがnullを返すようにしたい場合には、nullすることはできません。それはnullの値をとることができる参照変数ではありません。メソッドの戻り値の型をIntegerラッパークラスに変更する必要があります。

+0

'} else {...} else {'本当ですか? :D – DevAndArtist

1

intがプリミティブデータ型であるとして署名をマークし、

-2

本当にnullを返すのですか?何かできることは、0の値でsavedkeyを初期化し、0をnull値として返します。よりシンプルにすることができます。

+2

与えられたコードはあまり知られていませんが、0が正当な戻り値である可能性があります。しかし、そうでなければ有効でない結果を返して失敗を示すあなたの考えは良いものです。 – catfood

+0

javaはこのような場合に例外を実装しているので、それは良くありません。 – Sarief

関連する問題