我对Java中的 assert 关键字不满意的原因是
1)默认情况下它已被禁用,因此在我希望它启用时确保启用它是一件令人头疼的事。
2)它的行为相当严格(理想情况下我想要一些控制反转);但这并不是非常重要。
我可以考虑的一些替代方案:
所以...总结一下..如何在生产代码中以默认禁用的方式断言?
(是的,这可能被某些人视为反模式,但我确实希望生产中至少有一些断言,即使断言失败只是默默地记录。即使在收缩包装中我也看到了一些空间,并且肯定在网站上。)
答案 0 :(得分:1)
我使用的是Spring Assert课程,它包含了相当广泛的检查范围。
答案 1 :(得分:1)
我不确定这是否是你想要的,但我已经常规使用commons-lang
Validate
多年了。通常在公共API方法/构造函数中,以确保正确传递参数。不只是notNull
(请参阅Lombok' s @NotNull
),还有noNullElements
等。
我特别喜欢不可变的<T> T notNull(T object)
签名:
private final JSCodeModel codeModel;
private final String name;
public FunctionDeclarationImpl(JSCodeModel codeModel, String name,
String[] parameterNames, JSSourceElement[] sourceElements) {
this.codeModel = Validate.notNull(codeModel);
this.name = Validate.notNull(name);
...
}
实际上你的要求是什么?
答案 2 :(得分:0)
JUnit的assertEquals()等 - 适用于测试,但不能在主代码中使用
在技术上,没有什么能阻止您在主代码中使用JUnit声明(和/或Hamcrest匹配器)。只需在类路径中包含Junit jar。它通常没有完成,但这比任何技术限制都更符合惯例。
Java 7还引入了Objects.requireNotNull(obj, message)
和类似的方法,尽管不像JUnit断言那样功能齐全。
但我认为如果你想采用更标准化的方法,番石榴的先决条件可能是最好的。