假设我有这样一个注释类
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodXY {
public int x();
public int y();
}
public class AnnotationTest {
@MethodXY(x=5, y=5)
public void myMethodA(){ ... }
@MethodXY(x=3, y=2)
public void myMethodB(){ ... }
}
那么是否有一种方法可以查看对象,使用@MethodXY注释"查找"出其元素x = 3, y = 2的方法,并调用它?
这个问题已经在这里用核心Java反射得到了回答。我想知道这是否可以使用Reflections 0.9.9-RC1 API来完成,而不必使用一些循环代码或通过编写一些直接比较方法来迭代方法,我可以在其中搜索给定参数作为键或其他东西的方法。
当然,您可以使用Reflections#getMethodsAnnotatedWith()。
你可以在这里找到答案
像这样的代码将做这样的事情:
public static Method findMethod(Class<?> c, int x, int y) throws NoSuchMethodException {
for(Method m : c.getMethods()) {
MethodXY xy = m.getAnnotation(MethodXY.class);
if(xy != null && xy.x() == x && xy.y() == y) {
return m;
}
}
throw new NoSuchMethodException();
}
public static void main(String[] args) throws Exception {
findMethod(AnnotationTest.class, 3, 2).invoke(new AnnotationTest());
findMethod(AnnotationTest.class, 5, 5).invoke(new AnnotationTest());
}