5

XA と YA の 2 つの Java 注釈タイプがあります。どちらにもいくつかのメソッド()があります。ソース コードを解析し、Annotation オブジェクトを取得します。ここで、アノテーションを実際の型に動的にキャストして、method() を呼び出せるようにしたいと思います。instanceof声明なしでどうやってそれを行うことができますか?スイッチのようなソースは本当に避けたいです。私はこのようなものが必要です:

Annotation annotation = getAnnotation(); // I recieve the Annotation object here
String annotationType = annotation.annotationType().getName();

?_? myAnnotation = (Class.forName(annotationType)) annotation;
annotation.method(); // this is what I need, get the method() called

?_? myAnnotation タイプが何であるかわからないことを意味します。注釈の継承が許可されていないため、XA および YA 注釈に基本クラスを使用できません。それとも何とかできるのでしょうか?

提案や助けをありがとう。

4

2 に答える 2

6

タイプセーフな方法を使用して注釈を取得しないのはなぜですか?

final YourAnnotationType annotation = classType.getAnnotation(YourAnnotationType.class);
annotation.yourMethod();

注釈が見つからない場合は、null が返されます。

これはフィールドとメソッドでも機能することに注意してください。

于 2011-04-29T13:47:01.030 に答える
5

1つの方法は、名前を使用してメソッドを動的に呼び出すことです。

Annotation annotation = getAnnotation();
Class<? extends Annotation> annotationType = annotation.annotationType();
Object result = annotationType.getMethod("method").invoke(annotation);

このアプローチは非常にリスクが高く、必要に応じてコードのリファクタリングを完全に損なうことになります。

于 2011-04-29T13:22:31.677 に答える