我希望有一种项目范围内的快速失败机制(可能是一个
在我的项目中,
我意识到我可以添加断言(使用isNaN)或其他测试,但我想知道是否有更优雅的方法。
RuntimeException
),用于任何导致NaN
赋值的代码。在我的项目中,
NaN
从不是有效值。我意识到我可以添加断言(使用isNaN)或其他测试,但我想知道是否有更优雅的方法。
NaN
是一个有效的值,使用它不会引发任何异常。如果没有任何普遍的监控机制可用,您将必须在可能被分配或从方法返回的点显式地进行测试。是的,您可以使用AspectJ(面向切面编程)在将值设置为NaN时抛出错误。
基本上,您想拦截每次设置值,并执行其他功能。
我们在代码库中做过类似的事情...但我不能在这方面给您太多帮助。
如果您准备牺牲应用程序的性能,可以创建 Double(或其他要使用的数字对象)的包装器,并在设置 NaN
时抛出异常。
另一种方法是将代码检查器(例如PMD)集成到构建过程中,并创建一个规则,报告每个Double.NaN
的赋值。
这不会完美解决问题,因为它无法捕获从外部(数据库、连接等)获取的NaN或某人通过位操作创建的NaN,但至少可以确保不能将Double.NaN
分配给变量或用作方法参数或在评估中使用。
定义规则可能具有挑战性,但至少这是另一种方法。最简单的规则可能是完全禁止使用Double.NaN
。
isNaN
测试的情况下,精确地知道复杂数值计算出了什么问题。在许多其他环境中,我可以使用IEEE 754陷阱,但是在JVM上却不能这样做。 - Jouni K. Seppänen