假设我有一个像这样使用的注释:
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个不同的文件,出于多种原因,我希望避免这种情况。有没有一种方法可以在相同的注释文件?。唯一的方法是在接口上使用静态/默认方法,但是这两种方法键入的效果都会很差。
还有其他方法吗?