是否可以在运行时访问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()