假设我有以下代码:
public class MainClass {
public static void main(String[] args) {
System.out.println(sumNumbers(10, 10));
}
//@requires a >= 10;
//@ensures \result < 0;
public static int sumNumbers(int a, int b) {
return a+b;
}
}
我可以在这里做两件事:
使用代码合同(在这种情况下,注释中的内容)。当 sumNumbers 运行并且 a < 10 时,它会立即抛出异常(尽管它似乎不是很有描述性):
Exception in thread "main" org.jmlspecs.jmlrac.runtime.JMLInternalNormalPostconditionError: by method MainClass.sumNumbers
at MainClass.sumNumbers(MainClass.java:500)
at MainClass.internal$main(MainClass.java:9)
at MainClass.main(MainClass.java:286)
或者...
抛出异常。异常可以像我想要的那样具有描述性。我还要检查函数的末尾,看看后置条件是否为真。
你会在这里使用哪个,为什么?