题
我想要某种项目范围内的快速失败机制(也许是 RuntimeException
)对于任何导致赋值的代码 NaN
.
在我的项目中 NaN
永远不是一个有效值。
我意识到我可以添加断言(使用 为 NaN)或其他测试,但我想知道是否有更优雅的方法。
解决方案
是的,只要值设置为 NaN,您就可以使用 AspectJ(面向方面编程)抛出错误。
本质上,您希望在设置值时进行拦截,并执行一些其他功能。
我们在代码库中做了类似的事情......但除此之外我无法给你太多帮助。
其他提示
没有 - 因为NaN
是一个有效的值,使用它不会导致抛出任何异常。没有任何的无处不在的监督机制,以使用,你必须在它可以从一个方法分配或返回的点明确测试。
如果你准备好牺牲应用程序的性能,您可以创建双(或您想使用其他数字对象)的包装,并抛出异常,当NaN
设置。
从技术上讲,可以创建一个代理来执行此操作 仪器仪表 要注入的相关代码 断言 或者 如果 自动测试。这将涉及一些字节码检查和转换(例如使用 先进制造商)。在我看来,需要特殊的情况才能保证这一点。您必须小心,不要检测任何依赖于能够处理的类 南 内部。
我不知道有人写过这样的代理。如果您正在寻找灵丹妙药,我认为没有。
只是另一种方法 - 你可以码检查如 PMD 集成到您的构建过程,并创建一个规则,报告Double.NaN
的每一项任务。
这不会是完美的,因为它不能赶上楠,你从外面弄(数据库连接)或有人通过创建位操作,但至少可以保证Double.NaN
不能被分配给一个变量或用作方法参数或评估内部。
定义规则可能是一项挑战 - 但至少 - 这是另一种方法。最简单的规则可能是在所有禁止Double.NaN
。
不隶属于 StackOverflow