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



假设我有这样一个注释类

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

相关内容

  • 没有找到相关文章

最新更新