New to Java 8, the AnnotatedType class carries annotations bind to types in Generic expressions.
So if I write
@MaxLength(3) List<@NotNull Integer> myField;
I can get the @NotNull annotation via something like:
Field f = MyClass.class.getDeclaredField("myField");
AnnotatedParameterizedType annType = (AnnotatedParameterizedType) field.getAnnotatedType();
AnnotatedType[] childAnnotatedTypes = annType.getAnnotatedActualTypeArguments();
But then I have to assume the parameter I want is the first in the returned array. But maybe I have something like
class MyFunnyList<T> implements List<@NotNull Integer> {}
// ...
private MyFunnyList<@Null String> myFunnyField;
Using ResolvedType, I can call type.typeParametersFor(List.class).get(0) to get the correct parameter type (Integer rather than String). It'd be nice to have also a way to retrieve the annotations associated with it (@NotNull rather than @Null). Note that this feature must not break support for Java 7, so some type of switch will probably need to be used.
New to Java 8, the AnnotatedType class carries annotations bind to types in Generic expressions.
So if I write
I can get the
@NotNullannotation via something like:But then I have to assume the parameter I want is the first in the returned array. But maybe I have something like
Using
ResolvedType, I can calltype.typeParametersFor(List.class).get(0)to get the correct parameter type (Integerrather thanString). It'd be nice to have also a way to retrieve the annotations associated with it (@NotNullrather than@Null). Note that this feature must not break support for Java 7, so some type of switch will probably need to be used.