Gun*_*nar 15 java reflection annotations type-annotation
假设我在一个使用Java 8类型注释的类中有以下成员:
private List<@Email String> emailAddresses;
Run Code Online (Sandbox Code Playgroud)
是否可以@Email使用反射读取在运行时使用的String类型上给出的注释?如果是这样,怎么办呢?
更新:这是注释类型的定义:
@Target(value=ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Email {}
Run Code Online (Sandbox Code Playgroud)
kap*_*pex 15
对的,这是可能的.表示这种结构的反射类型被称为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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |