我有几个注释,其中一个带有一些值的注释:
@Retention(RUNTIME)
@Target(PARAMETER)
public @interface Size {
int min() default 1;
int max() default Integer.MAX_VALUE;
}
现在我有一些代码需要动态读取注释的所有这些值,并获取字段的类型和值。所以我不想检查我拥有的注释类型,而是更动态地进行检查。我注意到注释有点像带有某些方法的接口,所以我想我也许可以这样做:
Method[] methods = annotation.annotationType().getMethods();
Class<?>[] constructorParams = new Class<?>[methods.length];
Object[] values = new Object[methods.length];
int i = 0;
for(Method m : methods) {
constructorParams[i] = m.getReturnType();
values[i++] = m.invoke(annotation);
}
Constructor<? extends CustomValidator> constructor = clazz.getConstructor(constructorParams);
return constructor.newInstance(values);
这行得通吗?还有其他更好的方法吗?
谢谢!