0

我有几个注释,其中一个带有一些值的注释:

@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);

这行得通吗?还有其他更好的方法吗?

谢谢!

4

1 回答 1

0

好的,给定上面的代码,改变这个语句:

Method[] methods = annotation.annotationType().getMethods();

有了这个声明

Method[] methods = annotation.annotationType().getDeclaredMethods();

修复它

于 2012-11-16T12:37:12.070 回答