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 に答える