質問
の私は、次のコードを持っていると仮定しましょう
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;
}
}
私はここで2つのことを行うことができます:
を使用するコードの契約(この場合は、コメントで何です)。 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)
や...
例外をスローします。例外は、私が好きな記述することができます。私はポストの条件が満たされているか、いない時はいつでも見ることが関数の最後にチェックするためにも思います。
ここで使用することになると、なぜ?
解決
私は私のためのヒント、それをコード契約のアイデアを好きですが、記述IllegalArgumentException
(または類似)。これは、システムが壊れているかどうか(間違って何が起こっているか診断して起動するか、開発中にAPIを悪用している場合、あなたに頭を与える明示的な例外メッセージを取得するためのサポート/生産の役割(あるいは開発)でより明確です)。
他のヒント
あなたは、無効な入力は、あなたのプログラムの通常動作時には、この引数に渡される可能性があることを期待していますか?その場合、あなたはそれから回復することができますか?
その場合は、、チェック例外は、移動するための方法です。
あなたが例この種から回復できない場合は、、その後、すべての手段によってそれ契約作ると大声で失敗する - しかし、いずれの場合も、私は説明のエラーメッセージを使用します。
。所属していません StackOverflow