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:実はこれ間違い!「ひがやすを」さんから指摘があった!