アノテーションによるアサーション(その10 @Max, @Min 編)
サポート対象として追加された型
- byte
- short
- float
- double
- Byte
- Short
- Float
- Double
- BigDecimal
- BigInteger
浮動小数点数をサポートするために行った変更点
浮動小数点数をサポートするため、@Max および @Min に与える値の型を long から double に変更しました。
精度に注意
double は long より大きな値を扱うことが可能ですが、精度が低いためある一定のサイズより大きな long 値との比較がうまくいかないことに注意する必要があります。
以下の例では、Maxに指定した値よりも1大きい値を渡すことによりアサーションエラーになるように見えますが、double の丸め処理のためにエラーにはなりません。
public static void main(String[] args) { // 9223372036854775807 のつもりだが、実は double の丸め処理のため 9223372036854776000。 set(Long.MAX_VALUE); } // 9223372036854775806 のつもりだが、実は double の丸め処理のため 9223372036854776000。 public static void set(@Max(Long.MAX_VALUE - 1) double value) { }
非数および無限大値は非サポート
@Max および @Min に設定する値として以下の値を設定した場合、ウィービングを行おうとした段階でエラーとなります。
- Float.NaN
- Float.POSITIVE_INFINITY
- Float.NEGATIVE_INFINITY
- Double.NaN
- Double.POSITIVE_INFINITY
- Double.NEGATIVE_INFINITY
-
- -
- アノテーションによるアサーション(その1)
- アノテーションによるアサーション(その2 mavenプラグイン編)
- アノテーションによるアサーション(その3 java agent 編)
- アノテーションによるアサーション(その4 eclpse 編)
- アノテーションによるアサーション(その5 訂正編)
- アノテーションによるアサーション(その6 @Max, @Min 編)
- アノテーションによるアサーション(その7 @NotEmpty 編)
- アノテーションによるアサーション(その8 java5 編)
- アノテーションによるアサーション(その9 インラインか、メソッド呼び出しか、それが問題だ編)
- アノテーションによるアサーション(その10 @Max, @Min 編)