アノテーションによるアサーション(その6 @Max, @Min 編)
例
以下に @Max アノテーションの例を示します。(@Minの例は示しませんが、比較条件以外は@Maxと同様です)
ウィービング可能な例
public void set(@Max(10) int value) { } public void set(@Max(10) Integer value) { } public void set(@Max(10) long value) { } public void set(@Max(10) Long value) { } public void set(@Min(10) @Max(20) Integer value) { } @Max(10) public int get(){ return 0; } @Max(10) public Integer get(){ return 0; } @Max(10) public long get(){ return 0; } @Max(10) public Long get(){ return 0L; } @Min(10) @Max(20) public Long get(){ return 0L; }
ウィービング不可能な例
以下の場合は、バイトコードに対してウィービングを試みる段階でエラーとなります。
// int 型の上限を超えている public void set(@Max(100000000000L) int value) { } // int 型の上限を超えている public void set(@Max(100000000000L) Integer value) { } // 非対応の型 public void set(@Max(10) Object value) { } // 非対応の型 @Max(10) public void get(){ }
アサーションエラーになる例
以下の場合は、@Maxアノテーションで指定された値より大きい値を扱おうとした段階でエラーとなります。
// サンプルクラス class SampleBean { Integer value = null; public void set(@Max(20) Integer value) { this.value = value; } @Max(10) public Integer get() { return value; } } // 上限を超えた値をセットしようとしてエラー new SampleBean().set(21); // null をセットしようとしてエラー new SampleBean().set(null); // 上限を超えた値を返そうとしてエラー SampleBean bean = new SampleBean(); bean.set(15); bean.get(); // null を返そうとしてエラー new SampleBean().get();