假设我有这个注释类
@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 Reflection已经回答了here这个问题。我想知道是否可以使用Reflections 0.9.9-RC1 API完成此操作,而不必使用一些for循环代码迭代方法,或者通过编写一些直接比较方法,我可以使用给定参数作为键或其他东西搜索方法。
答案 0 :(得分:1)
当然,您可以使用Reflections#getMethodsAnnotatedWith()。
您可以找到答案here。
答案 1 :(得分:0)
这样的事情会做的事情:
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());
}