-アノテーションの継承
超Aptによって実現するカスタムメタアノテーションとサポートフレームワーク(Ikushipe)によって、アノテーションに擬似継承機能を作れないか考えています。
@PageModel public interface LoginModel { @Property @LengthValidator(min=1, max=6) String getUserId(); }
ユーザーが実装するアノテーションである、LengthValidatorはフレームワークが用意するカスタムメタアノテーションValidatorを利用して、継承っぽく、かつジェネリックス風なつくりをする
// 心はT extends Validator。 @Retention(RetentionPolicy.RUNTIME) @Validator(MyLengthValidatorImpl.class) public @LengthValidator { int min() default -1; int max() default -1; }
値検証の実体であるLengthValidatorImplはPOJO。VariableとExecuteというフレームワーク提供のアノテーションで動作。抽象クラスの場合、フレームワークがバイトコードエンジニアリング等でエンハンスする。
public abstract class MyLengthValidatorImpl { @Variable public abstract int getMin(); @Variable public abstract int getMax(); @Execute void myExecute(Object value, Locale locale) throws Exception { int min = getMin(); int max = getMax(); if(MyUtil.checkLength(min, max, value) == false) { throw new MyLengthError(min, max, value,locale); } } }
出来れば有効な気がします。