我想要某种项目范围内的快速失败机制(也许是 RuntimeException)对于任何导致赋值的代码 NaN.

在我的项目中 NaN 永远不是一个有效值。

我意识到我可以添加断言(使用 为 NaN)或其他测试,但我想知道是否有更优雅的方法。

有帮助吗?

解决方案

是的,只要值设置为 NaN,您就可以使用 AspectJ(面向方面​​编程)抛出错误。

本质上,您希望在设置值时进行拦截,并执行一些其他功能。

我们在代码库中做了类似的事情......但除此之外我无法给你太多帮助。

其他提示

没有 - 因为NaN是一个有效的值,使用它不会导致抛出任何异常。没有任何的无处不在的监督机制,以使用,你必须在它可以从一个方法分配或返回的点明确测试。

如果你准备好牺牲应用程序的性能,您可以创建双(或您想使用其他数字对象)的包装,并抛出异常,当NaN设置。

从技术上讲,可以创建一个代理来执行此操作 仪器仪表 要注入的相关代码 断言 或者 如果 自动测试。这将涉及一些字节码检查和转换(例如使用 先进制造商)。在我看来,需要特殊的情况才能保证这一点。您必须小心,不要检测任何依赖于能够处理的类 内部。

我不知道有人写过这样的代理。如果您正在寻找灵丹妙药,我认为没有。

只是另一种方法 - 你可以码检查如 PMD 集成到您的构建过程,并创建一个规则,报告Double.NaN的每一项任务。

这不会是完美的,因为它不能赶上楠,你从外面弄(数据库连接)或有人通过创建位操作,但至少可以保证Double.NaN不能被分配给一个变量或用作方法参数或评估内部。

定义规则可能是一项挑战 - 但至少 - 这是另一种方法。最简单的规则可能是在所有禁止Double.NaN

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top