![]() |
1
54
原则上, assertions 与其他许多运行时检查没有什么不同。 例如,Java绑定检查运行时的所有数组访问。这会使事情变慢吗?对。它有益吗?绝对!一旦发生超出限制的违规行为,就会抛出异常,并向程序员发出任何可能的错误警报!在没有绑定数组访问的其他系统中,检查的行为更加不可预测!(通常会造成灾难性的后果!). 无论您使用库还是语言支持,断言在精神上都是相似的。有性能成本,但绝对值得。事实上,断言更有价值,因为它是显式的,并且它传达了更高层次的概念。 如果使用得当,可以将性能成本和价值降到最低,无论是对于客户(客户会更早而不是更晚地发现违反合同的行为)还是开发人员(因为合同 自我实施 和 自描述 )最大化。 另一种看待它的方法是将断言视为“积极的评论”。毫无疑问,评论是有用的,但它们是被动的;从计算上讲,它们什么也不做。通过将一些概念表述为断言而不是注释,它们变得活跃起来。它们实际上必须在运行时保持不变,否则将被捕获。 |
![]() |
2
27
这些断言是由库提供的,与内置声明不同
这里有一个区别:
在我看来(就其价值而言),这是一种验证参数的好方法。如果您像问题标题所暗示的那样使用了内置断言,那么我会反驳它,因为必要的检查不应该是可移动的。但这只是以下内容的简写:
…这在公共方法中总是很好的做法。 断言的内置样式对于条件应该始终为真的情况或对于私有方法更有用。这个 language guide introducing assertions 有一些很好的指导方针,基本上就是我刚才描述的。 |
![]() |
3
18
是的,这是很好的做法。 在Spring案例中,这一点尤为重要,因为检查正在验证通常来自XML连接文件的属性设置等。换句话说,他们正在验证webapp的配置。如果您曾经进行过任何严重的基于Spring的开发,那么当您犯了一个愚蠢的配置错误时,这些验证检查将为您节省调试时间。
但是请注意,在一个名为
更新
在Java 7中(及以后)
或
但是,请注意,此方法会引发
|
![]() |
4
6
基于Sun的 guide 关于断言,你应该 不 使用断言检查公共方法中的参数。
|
![]() |
5
2
在非常大且设计/维护不好的系统中,如果您希望提高方法的可预测性,例如,6000行长,并且公司中没有人再了解这些方法,那么使用assert关键字可以导致开发环境崩溃,从而发现错误是很有价值的。但是,如果您在生产中实现这些断言,那么您可能会短路一个补丁,尽管这个补丁的构想很糟糕,但它修复了一个问题。您希望通过在开发环境而不是生产环境中发现补丁来修复这个坏补丁。所以您将在开发时打开断言,并在生产中关闭它们。 在开发时使用assert关键字的另一个有效方法是将有效性检查插入到算法中,这些算法必须以毫秒为单位执行,并且与不可预测或未测试的调用程序完全隔离。在这种情况下,您可能无法在生产中保留有效性检查,尽管它在开发中仍然非常有用。另一方面,如果您正在验证的参数的来源是不可预测的,或者可能是不可预测的(例如,如果部分由用户输入决定的话),那么即使在生产环境中,您也可能永远无法跳过检查,并且应该将性能损失视为业务成本。(在上一种情况下,您可能不想使用断言。)但是您应该选择断言来消除生产时间有效性检查。 只有 分析后会告诉您根本负担不起开销。 |
![]() |
6
1
是的,这是个好主意。您正在强制收缩接口或类。如果存在违反合同的情况,您希望尽快检测到。等待的时间越长,结果越不可预测,诊断起来就越困难。 当您像这样明确地检查时,您还应该提供一条信息消息,当您在日志文件中查看时,它可以提供有用的上下文来帮助查找根本原因,甚至只是为了认识到您对合同是什么做出了错误的假设。 |
![]() |
7
0
我保持我的 已发布二进制文件中的断言 但使用修改后的行为:不调用Abort,但收集StackTrace。 详细信息如下: http://blog.aplikacja.info/2011/10/assert-to-abort-or-not-to-abort-thats-the-question/ |
![]() |
J.Yarovich · 我可以在日志文件中写入断言消息吗? 7 年前 |
![]() |
Leedehai · C++:汇编代码包含断言结果 7 年前 |
![]() |
seldon · 节点。js断言。使用异步函数抛出(Promises) 9 年前 |
![]() |
user2738698 · 是否可以检查pcap中是否激活了接口? 10 年前 |