是否可以在运行时访问Java 8类型信息?

假设我在一个使用Java 8类型注释的类中有以下成员:

private List emailAddresses; 

是否可以使用reflection读取在运行时使用的String类型上给出的@Email注释? 如果是这样,怎么办呢?

更新:这是注释类型的定义:

 @Target(value=ElementType.TYPE_USE) @Retention(RetentionPolicy.RUNTIME) public @interface Email {} 

对的,这是可能的。 表示这种结构的reflection类型称为AnnotatedParameterizedType 。 以下是如何获取注释的示例:

 // get the email field Field emailAddressField = MyClass.class.getDeclaredField("emailAddresses"); // the field's type is both parameterized and annotated, // cast it to the right type representation AnnotatedParameterizedType annotatedParameterizedType = (AnnotatedParameterizedType) emailAddressField.getAnnotatedType(); // get all type parameters AnnotatedType[] annotatedActualTypeArguments = annotatedParameterizedType.getAnnotatedActualTypeArguments(); // the String parameter which contains the annotation AnnotatedType stringParameterType = annotatedActualTypeArguments[0]; // The actual annotation Annotation emailAnnotation = stringParameterType.getAnnotations()[0]; System.out.println(emailAnnotation); // @Email()