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 doc 以通过 Doclet API(此处)显示这些状态代码,但无法交互内部 statusCodes 值,但是我能够像这样迭代简单的注释

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

返回 StatusCode 注释的值,但是如何迭代 StatusCodes 值?任何帮助都会得到帮助。

4

2 回答 2

3

在尝试了很多之后。我找到了解决方案。有两种方法可以迭代数组注释类型。首先,如果我们使用 Method API(java.lang.reflect),那么它将非常简单,正如 Marius 在他的回答中所说的那样。

第二个是当我们使用 doclets(导入 com.sun.javadoc.MethodDoc api 和其他)时,它有点棘手。首先获取您的 MethodDoc 对象,然后通过此获取 AnnotationDesc 对象,您将在上述问题案例中达到 @StatusCode 注释。假设我有 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();

        }

您将在键中获得状态代码,在值中获得状态注释。

于 2013-04-12T10:36:58.403 回答
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
        }
    }

格!

于 2013-04-11T09:14:27.173 回答