2016-03-29 9 views
4

インタフェース注釈は、ゼロ情報 javadocを有する方法Annotation#annotationType()とは何ですか?

Class<? extends Annotation> annotationType() 

を指定します。それが何のために良いのだろうか。私が見つけたのはquestionですが、そこには実際には必要ありません。しかし、誰もが持っている -


それはaが複数の注釈を実装するクラスのインスタンスであるときを除いて...同じ仕事をして私たちは

a.annotationType().equals(MyAnnotation.class) 

しかし

a instanceof MyAnnotation 

を使用することができますそのような獣を見たことがありますか?

aclass A implements MyAnnotation, YourAnnotationのインスタンスである場合、2つの以上のテストが等価ではありませんが、質問は優れているものです...

(*)それはgetXメソッドは、()は、xを返すことを示すようなものです。

答えて

2

getClass()は、実行時に注釈が実装されるため、注釈インスタンスのナンセンス型を頻繁に返します。

annotationType()は、「正しいもの」 - アノテーションの反射型であり、ナンセンスランタイム型ではありません。

myEnumConstant.getClass()は列挙型の合成サブタイプを返すかもしれないが、を比較すると、enum定数に「正しいもの」を返す。

+0

今私は理解しています...「Enum」との比較は助けになりました。もし私が 'Map 、Whatever>を展開すると、「本当の」クラスが必要になります。 – maaartinus

+0

私は頻繁に 'ClassToInstanceMap 'の周りを渡します。 –

0

annotationType()を使用する理由の1つは、アノテーションがプロキシクラスを使用して実装されている場合です。 Object.getClass()はプロキシクラスを返しますが、基礎となる「実際」の実装クラスが必要な場合があります。

これにはさまざまな例があります。特に、依存性注入やその他のヘビーウェイトリフレクションが関与している場合があります。

関連する問題