いくつかの注釈がありますが、その中にはいくつかの値を持つ注釈があります:
@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);
これは機能しますか?別のより良いアプローチはありますか?
ありがとう!