Java反射 - 寻找具有特定注释及其注释元素的方法

时间:2015-05-29 10:59:17

标签: java reflection annotations google-reflections

假设我有这个注释类

@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循环代码迭代方法,或者通过编写一些直接比较方法,我可以使用给定参数作为键或其他东西搜索方法。

2 个答案:

答案 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());
}