2011-11-30 3 views
16

longを返すメソッドがあり、有効な結果を計算できない場合があります。 DoubleNaNの定数を持ち、longでは表現できません。Javaで整数型のNaNを表現するにはどうすればよいですか?

私は2つの解決策を考えることができます:メソッドのシグネチャ、doubleを返すのNaNをチェックし、すべてがうまくている場合longに変換するための例外

  • 変更を投げる

    「Javanic」の方が好ましいですか?他の方法がありますか/私は何かが分かりませんでしたか?

  • +5

    'double'と' long'の間の変換は不可逆であることに気が付きますか? –

    答えて

    7

    返品タイプLonglongのボックス版)を返し、nullを返すことができます。

    +3

    私はただ例外を投げるのは悪い解決策と考えています。特に人々が戻り値を 'long'に割り当てることができれば、NPEが厄介になります。 – Voo

    +2

    NullPointerExceptionは厄介ではありません。メソッドが 'Long'を返し、nullが有効な戻り値であることを文書化した場合、nullをチェックするのは呼び出し元の責任です。 NPEが厄介であるというあなたの主張は、プログラマが悪いか怠惰であることを意味し、どちらもヌルを返さない正当な理由ではありません。 –

    9

    nullの値を許可するラッパークラス(つまり、java.lang.Integer,java.lang.Long)を使用するだけです。

    1

    私はnull値を返し、他の人が示唆したように例外

    かを投げるための私の票を投じるだろう

    1

    私の考えは、それがエラーを示しているため、例外をスローするだろう - 結果ができませんでした正確に計算されます。しかし、これは単なる意見の問題です。

    本当に返されるのは、具体的なニーズと有効な値によって異なります。たとえば、有効な数値が1以上の場合、フラグとして0を使用できます。または、あなたのフラグとして負の数を使うこともできます。

    または、これを入力すると、返信が表示され、Longを返し、nullに設定されていることがわかります。その後、それは自動化することができます。それは完全に正解です。

    メソッドからさらにデータを返す必要がある場合は、計算や結果に関するデータを含むlongプロパティやその他のプロパティを含むカスタムクラスを定義することもできます。

    しかし、私の個人的な好みは例外です。

    4

    NANを返すアプリケーションは設計上の問題には合致しません。理由はNANが例外的な状態であることを意味します。したがって、IllegalStateExceptionやEntityNotFoundExceptionのようなExceptionをスローしてNANではなく、

    あなたのアプリケーションが0(ゼロ)より大きいすべてを受け入れる場合、有効な値としてNANの代わりに負の数を返すことができます。これは不正なパスに達したことを示します。例外はそのようなシナリオでは最高です

    2

    このタイプのほとんどの質問と同様に、間違いがなく、答えは「それは依存します」。

    なぜ、の有効な結果を計算できないと考えることが重要です。無効な入力が原因である場合は、IllegalArgumentExceptionをスローする必要があります。

    通常の状況では発生しないような理由がある場合は、おそらく他の例外が適切です。

    有効な戻り値ではない長い値を考えて、エラーを示すために使用できます。

    そうでなければ、Longとnull returnを使用するMr. Pollexのソリューションも検討する価値があります。答えは、発信者の大部分にとっても便利なものに依存します。

    2

    NaN値を表すためにnullを使用することは勧めません。後でnullチェックをスキップすると、NullPointerExceptionが発生しやすくなります。 (NaN + x = NaN、NaN * x = NaN)このような場合は、NaN値での操作に意味があります。

    例外をスローすると、(NaNの途中でサポートされている)doubleを使用するか、自分のクラスを使用する方が良いと思います。

    2

    longintタイプのNaNを表すのにMIN_VALUEを使用します。これは追加のチェックを必要とし、場合によっては有益な場合があります。

    0

    これは、NaN値を表示するだけdouble型VARを定義し

    double identifier = java.lang.Double.NaN; 
    

    のように値を代入することは容易である私は、私はそれを使用し、それが働いていた同じような状況がありました。 ダイレクトパスが定義されていない場合、方法を見つける必要があります。

    +0

    質問は明示的に整数型についてです。 –

    +0

    Integerと同じものを使用できます。 –

    関連する問題