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

概要

 バージョン 0.0.6 にて、アサーションアノテーションに @Max と @Min を追加しました。

@Maxアノテーション

 最大値を指定するアノテーションです。現在は、int, long, Integer, Long 型をサポートしています。

@Minアノテーション

 最小値を指定するアノテーションです。現在は、int, long, Integer, Long 型をサポートしています。

 以下に @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();