Java反射:带注释的方法计数?

时间:2009-12-02 15:14:36

标签: java reflection annotations

这适用于使用Analyze注释过滤掉方法:

    for (Method m : ParseTree.class.getMethods()) {
        if (m.isAnnotationPresent(Analyze.class)) {

如果我只想要一个计数而不循环怎么办?是否有一些方法可以返回某个类中有多少方法具有某个注释?

2 个答案:

答案 0 :(得分:3)

这是一个非常特殊的用例,所以我真的怀疑,Java反射API中有一个方法。

但即使有这样的方法,它也会做同样的事情:迭代一个类的所有方法,计算注释并报告数字。

我建议您只在某个实用程序类中为此任务实现静态方法。

public static int countAnnotationsInClass(Class<?> testClass, Class<?> annotation) {
  // ...
}

答案 1 :(得分:1)

具有运行时保留的Java注释(即可以通过反射获得的注释)只能直接从存在注释的元素中访问。所以你将不得不循环遍历这些方法并检查你的示例中的注释。

如果您需要在类级别进行大量的注释处理,我建议您创建一个实用程序类来执行此操作:

public class AnnotationUtils {
    public static int countMethodsWithAnnotation(Class<?> klass,
                                                 Class<?> annotation) {
        int count = 0;
        for (Method m : klass.getMethods()) {
            if (m.isAnnotationPresent(annotation)) {
                count++;
            }
        }
        return count;
    }

    // Other methods for custom annotation processing

}

然后,您可以根据需要在其余代码中使用实用程序类在一个方法调用中获取所需的信息:

int count = AnnotationUtils.countMethodsWithAnnotation(ParseTree.class,
                                                       Analyze.class);