如何在Java中表示整数类型的NaN?

Han*_*etz 19 java types

我有一个返回的方法long,有些情况下无法计算有效的结果.DoubleNaN常数,这是不可表达的long.

我可以想到两个解决方案:

  • 抛出一个例外
  • 更改方法的签名以返回double,检查NaN并转换为long是否一切正常.

是优先/更"爪哇"?还有其他方法吗/我错过了一些明显的东西吗?

Mic*_*rdt 9

简单地使用包装类(即java.lang.Integer,java.lang.Long),它允许null值.


Bjö*_*lex 7

您可以制作返回类型Long(盒装版本long)并返回null.

  • 我认为只是抛出异常会有更糟糕的解决方案.特别是考虑到人们可能会试图将返回值分配给"long",这将导致令人讨厌的NPE. (4认同)
  • NullPointerException并不讨厌.如果方法返回`Long`并且文档null是有效的返回值,那么由调用者来检查null.您认为NPE令人讨厌的论点意味着程序员不好或懒惰,这也不是返回null的好理由. (2认同)

mpr*_*hat 5

任何返回 NAN 的应用程序都不符合设计观点,原因是 NAN 意味着发生了一些异常情况,因此您应该抛出像 IllegalStateException 或 EntityNotFoundException 这样的异常,以便调用者知道发生了什么而不是 NAN。

如果您的应用程序接受大于 0(零)的所有内容作为有效值,那么您可以返回负数而不是 NAN,这将指示到达的异常路径,如果您不希望抛出异常,尽管我觉得抛出异常是最好的这样的场景,


pcj*_*zer 5

我不建议使用 null 来表示 NaN 值。如果您跳过空检查,稍后很容易导致 NullPointerException。(而且由于隐式拆箱,这种 NullPointerException 可能很难被发现。您可能无法直接看到什么可以为 null。)否则,使用 NaN 值进行操作是有意义的:NaN+x=NaN,NaN*x=NaN。

在我看来,抛出异常、使用 double (顺便支持 NaN)或使用自己的类更好。