Java 8はrepeating annotationsを導入しましたが、それらを直接サポートしていない既存の構造よりもはっきりさせなければなりませんでした。彼らは@Repeatable
メタアノテーションを導入することによって、これをしなかったが、あなたはそこに1だか、オブジェクトの詳細-より-1注釈かどうかに応じて異なる動作を取得:要求されたタイプの複数の注釈が存在する場合繰り返し注釈の値を取得する適切な方法はありますか?
最初にコンテナアノテーションを取得することでそれらを取得できます。
これが唯一の注釈が存在する場合は、がコンテナアノテーションを使用することができないことを意味し、そしてloが-と-見よケースのように表示されます。私は1つ、より-より-1一緒に事件を処理するために、以下に書いたが、それは過度に複雑なようだ:
public static <C, T> List<T> getAnnotations(
Method m, Class<C> containerClass, Class<T> annotationClass) {
C container = m.getAnnotation(containerClass);
if (container != null && container.value().length > 0) {
return ImmutableList.copyOf(container.value());
}
// apparently the @Container isn't considered set unless
// there's *repeated* @Annotation elements
T annotation = m.getAnnotation(annotationClass);
if (annotation != null) {
return ImmutableList.of(annotation);
}
return ImmutableList.of();
}
これについて移動するクリーンな方法はありますか?ドキュメントではAnnotatedElement
を使用しても言及していますが、これを使用する方法はわかりません。メソッドはのオブジェクトのみを受け取り、Method
またはField
オブジェクトではありません。
[SO docs](http://stackoverflow.com/documentation/java/157/annotations/9902/repeating-annotations#t=201612010146085258575)があるときに、なぜOracleドキュメントを読みますか? ;) – shmosel
@shmoselリンクをいただきありがとうございます、それは正規のドキュメントよりも役に立つSOのドキュメントの素晴らしい例です。 – dimo414