16

assertのために使われているのか理解できませんでした.たくさんの例を読んだことがあります.

そのため、例を尋ねる代わりに、例を挙げて、これが の適切な使用法であるかどうかをお知らせしますassert

// The idea is that the `mode` variable should be 0 or 1, and no other number.
switch(mode) {
     case 0: 
          // do stuff
          break;
     case 1:
          // do other stuff
          break;

     default:
          // assert code?
}

これが正しい場合、この場合の使用方法を教えてください。これが本来の使い方ではない場合は、例を示してください。

4

3 に答える 3

19

この場合ではありません。

値を主張している場合、この値を使用していくつかの重要な評価が行われる前に、それがあなたが主張しているものであることを表明していることになります。値が null ではないこと、2 未満であること、または重要なコード ブロックに到達する前の何かであることをアサートできます。

assert (mode >= 0 && mode < 2);  // Ensures that `mode` is between 0 and 1.
// Switch statement to follow

ここでの使用はお勧めしません。コードがうまく読み取れず、-eaフラグでアサーションを有効にしない限り、アサーションは機能しません。

代わりに、何らかの例外をスローすることができます。0 または 1 でない場合modeは、処理できない不正な値であり、例外的/未定義の動作につながります。何らかの例外をスローします。

switch(mode) {
    case 0: 
        // do stuff
        break;
    case 1:
        // do other stuff
        break;
    default:
      throw new IllegalArgumentException("Mode is illegal");
}
于 2013-09-20T01:24:17.683 に答える