Допустим, у меня есть аннотация, которая будет использоваться следующим образом:
public void foo (@IntParam int quantity, @FooParam Foo bar) {
...
}
Я хотел бы вызвать этот метод, получить доступ к параметрам объекта и передать его следующим образом:
public void invokeFoo (Method fooMethod, Map<String, String> context) throws ... {
List<Object> params = Arrays.stream(fooMethod.getAnnotations()).map(annos -> {
if (annos[0] instanceof IntParam) {
return context.get( ... ); // <-
} else if (annos[0] instanceof FooParam) {
return new Foo(context); // <-
}
}).collect(Collectors.toList());
fooMethod.invoke(params.toArray());
}
Проблема с этим внедрением состоит в том, что мне нужно отредактировать 2 разных файла, если я хочу добавить новые типы параметров, которых я хотел бы избежать по нескольким причинам. Есть ли способ написать эти строкив том же файле аннотации? .Единственный способ - использовать статический метод / метод по умолчанию на интерфейсе, но в любом случае это приведет к плохому типу.
Любой другой способ?