2013-04-11 60 views
0

我創建了一個嵌套的自定義註釋。我的代碼是在這裏迭代複雜的自定義註釋數組

@StatusCode(statusArray = { 
      @StatusCodesArray(key="200", value="value is ok"), 
      @StatusCodesArray(key="400", value="resource not available"), 
      @StatusCodesArray(key="400", value="resource not available"), 
      @StatusCodesArray(key="400", value="resource not available") 
     }) 

現在我創建Java文檔顯示通過Doclet的API這些狀態代碼(here),但無法interate內statusCodes值,但是我能夠itereate簡單的註解這樣

AnnotationDesc annotationDesc = getAnnotation(method, "StatusCode"); 
ElementValuePair[] paramNames = annotationDesc.elementValues(); 

返回StatusCode註釋的值,但我怎麼迭代StatusCodes的值?任何幫助appriciated。

+0

請原諒我,但它有點向後'@StatusCode'應該是一個代碼和@ @ StatusCodes'數組。或者也許重命名爲「@StatusCodeArray」以防止混淆。 – Bart 2013-04-11 08:42:57

+0

感謝Bart,我編輯了這個以防止混淆。 – 2013-04-11 09:06:03

回答

1

嘗試訪問註釋,因爲您正在定義它;

// MZ: Parse the status code annotations 
    StatusCode statusCodes = method.getAnnotation(StatusCode.class); 
    if (statusCodes != null) 
    { 
     for (StatusCodesArray statusCodeArray : statusCodes.value()) 
     { 
      // MZ: Do your magic 
     } 
    } 

GI!

+0

感謝您的回答Marius,但由於限制問題,我不能直接使用這些Annotation接口(StatusCode,StatusCodeArray)名稱。註解接口在項目的其他模塊中定義,並且我正在生成任何其他模塊中的doc。 – 2013-04-11 09:42:50

3

嘗試了很多之後。我找到了這個解決方案。迭代數組註記類型有兩種方法。 首先,如果我們使用Method API(java.lang.reflect),那麼它會非常簡單,就像Marius在他的回答中所說的那樣。

第二是當我們使用doclets(import com.sun.javadoc.MethodDoc api和其他),那麼它有點trikier.First獲取您的MethodDoc對象,並通過此獲取AnnotationDesc對象,你將達到上面的@StatusCode註釋問題case.Suppose我有AnnotationDesc API的annotationDesc對象,然後使用以下代碼來迭代& statusCodeArray註釋的值。

 ElementValuePair[] paramNames = annotationDesc.elementValues(); 
     AnnotationValue[] statusCodes = (AnnotationValue[])paramNames[0].value().value(); 
     if(statusCodes==null||statusCodes.length==0) 
     { 
      return statusCodeValue; 
     } 
     for(AnnotationValue statusCode:statusCodes) 
     { 
      AnnotationDesc anoDesc=(AnnotationDesc)statusCode.value(); 
      if(anoDesc==null) 
      { 
       return statusCodeValue; 
      } 
      String key=(String)anoDesc.elementValues()[0].value().value(); 
      String value=(String)anoDesc.elementValues()[1].value().value(); 

     } 

您將通過鍵值和狀態註釋獲取狀態碼。