アノテーションによるアサーション(その10 @Max, @Min 編)

概要

 バージョン 0.0.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) {
}