Annotation Restricted

Annotation にも型制約を」ということで、少々考えてみました。

AspectをAnnotationでウィービング(?)するのが流行ってますが、そのノリで上位クラスに制約を掛け、これをコンパイルすればいいのではと。

ちなみに、java.lang.annotation.AnnotationFormatError をスローするのが流行らしい。

// このクラスを継承するには
@Strict({
    // hoge* メソッドが @Hoge を注釈に持ち
    @Require(target="hoge*", rule = Hoge.class),
    // foo* メソッドが @Foo を注釈に持たなければなりません
    @Require(target="foo*", rule = Foo.class)
})
public class Base {
    // no members..
}

まぁ、aptの勉強がてら。