2009-12-02 66 views
1

這工作得很好濾除方法與Analyze註釋:Java反射:帶註釋的方法數量?

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

如果我只想計數,而無需通過循環呢?是否有某種方法可以返回某個類中有多少方法具有特定的註釋?

回答

3

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

但即使有這樣的方法,它也會這樣做:遍歷類的所有方法,計算註釋並報告數量。

我建議你在這個任務的一些實用工具類中實現一個靜態方法。

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

是的,真正的問題是:爲什麼? – 2009-12-02 16:29:05

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);