- ベストアンサー
nullで、return出来るのはどんな時ですか?
「このメソッドは型 ○○ の結果を戻す必要があります」 ・上記エラーが出たので、Eclipseで「returnステートメントを追加します」を選択したら、「return null;」でエラーが消えたので、びっくりしました ・指定された戻り値の型以外に、nullを使っても良いのでしょうか? 環境は、Android(JAVA)です
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
null は参照型ならば任意の型の代わりに使える特殊な型の値です。したがって、問題のメソッドが参照型を返すならば代わりに null を返すのは問題ありません。 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.1 (Java Language Specification) http://www.y-adagio.com/public/standards/tr_javalang/4.doc.htm#11128 (上記の日本語訳) なお、当然プリミティブ型を返すメソッドで null を返すことはできません。
その他の回答 (1)
- mitoneko
- ベストアンサー率58% (469/798)
nullは、特別の型を持ち、非常に特殊な動作をします。 単純に言えば、全ての型に自動的に変換され、どんな型としても扱える特別なnull型と言う型がある。と考えれば、すっきりするでしょうか。 このnull型は、唯一の値として、nullを持ちます。この型の生成には、nullリテラルを使うのが唯一の手段です。 全ての型に対して、自動変換を持ちますので、どんな型にでも代入できます。 ただし、nullが代入されたインスタンスに対しては、nullチェック以外のいかなるアクセスも出来ません。これに違反すると、NullPointerException例外が発生します。 もし、nullを返り値に使用するのであれば、そのメソッドを呼び出すルーチンでは、nullが帰ってきていないかどうかを一番にチェックしないといけません。 上手に使えば、「返り値が存在しない」・「何らかの理由で返り値が生成できない。」、そして、推奨は出来ませんが、「エラーが発生して正常な返り値が提供できない」等のレスポンスを返す、適切な、時として唯一の手段となります。(最後のエラーに関しては、本来は、例外を使う方が綺麗に作れます。) ただし、呼び出す側で、nullが帰ってきたかどうかをわざわざ調査する必要がありますから、nullを返す可能性がある時は、必ずドキュメント化(例えばコメント・仕様書など)しておいてくださいね。後で、そのメソッドを使った時に、NullPointerException例外で頭を抱える羽目になります。(単純にif文を追加するだけで済めば良いですが、入れ子になった複雑な式を作った時に、これやられると、愚痴りたくなります(苦笑))
お礼
詳しい説明ありがとうございました。 大変参考になりましたー
お礼
回答ありがとうございました。 リンク先、参考になりましたー