5

計算量の少ないアサーションを常に有効にして、計算量の多いアサーションを無効にしたいと考えています。実際のユースケースは、コードを本番環境に移行する場合です (Pragmatic Programmer によると、これはアサーションを処理する方法として推奨されています)。

アサーションを制御するための最良の方法は何ですか? (注、「-ea」を使用して VM 変数でアサーションを既に有効にしています)。

簡単な例:

/**
*
* @precondition sizeOfList >= 2
*/
private ArrayList<Integer> createSortedList(int sizeOfList){
    ArrayList<Integer> results = new ArrayList<Integer>();

    for(int i = 0; i<sizeOfList; i++){

        <algorithm to add sorted numbers to array>

    }

    if(<some_flag>)
        assert results.get(0) < results.get(1) : "Results are not sorted.";

    assert results.size() == sizeOfList : "Results-list size does not equal requested size.";

    return results;
}

システム プロパティを使用して変数を制御するのが最善ですか? その場合、(Eclipse で) 特定のクラスだけでなく、プロジェクト全体に対してシステム プロパティを設定できますか?

「Constants」クラスで定義された定数変数を使用することをお勧めしますか?

私が考えていない他の方法はありますか?

前もって感謝します。

4

1 に答える 1

2

assert ステートメントの特徴は、オフにできることです。そのため、常に実行する必要のないアサーションにのみ使用します。常に実行されるアサーションについては、次のようにします。

if (results.size() != sizeOfList)
    throw new AssertionError("Results-list size does not equal requested size.");

次に、-eaJVM オプションを使用して、高価なアサーションを有効または無効にできます。

于 2012-09-25T18:24:37.187 に答える