我试图使用断言stmt来检查一个值是否大于1但是它没有按预期工作。
public class asserttest {
static void methoda(int i){
assert (i > 1);
System.out.println("This is methoda");
}
public static void main(String[] args){
methoda(-1);
}
}
输出: 这是方法
预期产量: - 的AssertionError
我能够通过启用断言来修复它。
答案 0 :(得分:2)
我的猜测是你被默认情况下没有启用的断言搞糊涂了。使用-enableassertions
命令行选项:
java -enableassertions asserttest
您还可以将断言限制为特定包,并使用-disableassertions
将包指定为禁用。
我个人更喜欢无条件验证参数值,正是因为这个 - 我不喜欢在测试中以“安全”模式运行代码的想法,但是让它在生产与安全关闭。这就像学会驾驶安全带一样开车,然后在没有任何保护的情况下进入F1比赛......
答案 1 :(得分:0)
一般情况下,不应对参数或任何输入值使用断言。
断言是为了描述不变量,它应该始终是true
。因此,出于性能原因可以将它们关闭。你必须启用它们,例如使用-ea
JVM选项。
但是应始终检查方法的输入,因此请使用
if(i<=1) throw new IllegalArgumentException("i must be >1");