My question is somewhat a little more advanced reflection problem.
Suppose you have a class:
import java.util.List;
public class Sample
{
private List<@First List<@Second String>> field;
}
As you see, type of field is List<List<String>>. Assume you have 2 different annotations: @First and @Second. These annotations are put on this field's generic type, respectively. Now, my goal is to access these both annotations at runtime.
Here is my code:
Field field = Sample.class.getDeclaredField("field");
AnnotatedType annotatedType = field.getAnnotatedType();
AnnotatedParameterizedType annotatedParameterizedType = (AnnotatedParameterizedType) annotatedType;
When I invoke getAnnotatedType() on field, it returns me an AnnotatedParameterizedType.
AnnotatedType annotatedActualTypeArgument = annotatedParameterizedType.getAnnotatedActualTypeArguments()[0];
Annotation firstAnnotation = annotatedActualTypeArgument.getAnnotations()[0];
getAnnotatedActualTypeArguments() method actually gives me the @First annnotation.
ParameterizedType innerType = (ParameterizedType) annotatedActualTypeArgument.getType();
However, when I try to get type of the inner generic argument, it gives me a ParameterizedType. Which correctly defines the type of inner-most argument: List<String>. But, because it is not of type AnnotatedParameterizedType, I cannot access @Second annotation.
Is there any way I can access the second annotation as well at runtime?
Aucun commentaire:
Enregistrer un commentaire