0

假设我有这个注释类

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

4

2 回答 2

1

当然,您可以使用Reflections#getMethodsAnnotatedWith()来实现。

你可以在这里找到你的答案。

于 2015-05-29T11:26:47.823 回答
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());
}
于 2015-05-29T11:26:06.610 回答