假設我有以下代碼:合同VS例外
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運行和< 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)
或...
拋出一個異常。例外情況可以像我想要的那樣具有描述性。我還要檢查函數的結尾,以便在帖子條件爲真時查看。
你會在這裏使用哪個,爲什麼?
最好的主意:同時使用! – 2010-03-18 20:58:42
如果可以的話,是的。我不熟悉上面提供的'代碼合同' – 2010-03-18 20:59:51
使用兩者都沒有意義。擁有一個聲明x> = 0的代碼合同的想法是我不必在方法體中再次檢查它。所以使用兩者都沒有意義。 – 2010-03-18 22:09:31