0

このコード スニペットは、K&B 模擬試験から取得しています。

public class Later {  
    public static void main(String[] args) {  
        boolean earlyExit = new Later().test1(args);  
        if (earlyExit) assert false;  // LINE 5  
        new Later().test2(args);  
    }  
    boolean test1(String[] a) {  
        if (a.length == 0) return false;  
        return true;  
    }  
    private void test2(String[] a) {  
        if (a.length == 2) assert false; // LINE 13  
    }  
}  

K&B の回答では、LINE-5 と LINE-13 はアサーションの不適切な使用であると述べています。理由を知りたいです。これは、K&B からのアサーションのトピックを読んだ後の私の観察です。

1. LINE 5 は、コマンド ライン引数の検証にアサーションを使用しているため不適切であることは理解しています。コマンド ライン引数の検証にアサーションを使用しないでください。

2.回答では、LINE 13もアサーションの不適切な使用であると述べています。アサーションのグッド プラクティスでは、アサーションを使用してプライベート メソッドの引数を検証できると述べています。私の質問は、LINE 13 がアサーションの不適切な使用である理由です。

これに関する洞察は役に立ちます。

4

2 に答える 2

1

アサーション ( Java のassertキーワード) は、コード、事前条件、または事後条件の不変条件の正確性を検証するために使用されます。これらはコード内の仮定をテストして一貫性のない状態をキャッチするために使用され、通常はバグまたは不要なフロー実行の指標です。
アサーションは本番環境ではスローされず、アサートされたコードは実行されないため、デフォルトで無効になっています

public class AssertionTest {            
  private boolean productionCode(){
    System.out.println("Prodution code executed");
    return true;
  }

  private void assertion() {
    assert productionCode();
  }
}

アサーションを有効にした場合の出力は次のとおりです。

Prodution code executed

アサーションが無効になっていると、出力は...何もありません!だから慎重に

構文:

  1. assert <boolean expression>;false の場合は AssertionError をスローします
  2. assert <boolean expression> : <expression with value>false の場合、詳細メッセージとともに AssertionError をスローします

あなたの例では

private void test2(String[] a) {  
  if (a.length == 2) assert false; // LINE 13  
}

正しい方法は

private void test2(String[] a) {  
  assert (a.length != 2);   
}

意味: aMUST がlenght等しくない 2 でなければエラー

Oracle のドキュメントについては、こちらを参照してください。

于 2013-08-08T18:25:50.457 に答える