Java Annotation - clazz.getAnnotation(AnnotationImpl.class) のキャスト

@Table(name="ISSUES")

というメタデータHibernateアノテーション)があるクラスがあって、別の作成中のユティリティークラスからこのメタデータを使おうと思って一瞬戸惑った。何のことはない「キャスト」をすればいいだけのコト。パラメータとして渡しているその当のクラスにキャストするところが何か「変な感じ」がしたのがだが、戻り値は1つの型に固定される(戻り値のオーバーロードはないというコト)のでインターフェイスの Annotation でしかしょうがなく、受ける変数の型の方が勝手に対応してくれるハズもないので、プログラマが明示的に「キャスト」するしかない*1

    private String findTableNameFromModelAnnotation(Class clazz){
        String foundTableName = "";
        assert clazz.isAnnotationPresent(Table.class);
        Table annotaion = (Table)clazz.getAnnotation(Table.class);
        foundTableName = annotaion.name();
        return foundTableName;
    }


とはいえ、「プログラミング言語」の方を融通良くすることで何とかならないものなのかな〜と少し考えてみた。すると、このような「思考」も結構楽しいものだと、少しまつもとひろゆきの気持ちが少しわかった気がした。

*1:実はこれ間違い!「ひがやすを」さんから指摘があった!