我创建了一个嵌套的自定义注释。我的代码在这里
@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(here)显示这些状态代码,但无法交换内部statusCodes值,但是我能够迭代这样的简单注释
AnnotationDesc annotationDesc = getAnnotation(method, "StatusCode");
ElementValuePair[] paramNames = annotationDesc.elementValues();
返回StatusCode注释的值,但是如何迭代StatusCodes值?任何帮助都是适当的。
答案 0 :(得分:3)
尝试了很多。我找到了解决方案。有两种方法可以迭代数组注释类型。 首先,如果我们使用Method API(java.lang.reflect)那么它将非常简单,正如Marius在他的回答中所说的那样。
第二个是当我们使用doclet(导入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();
}
您将在键值和状态注释中获取状态代码。
答案 1 :(得分:1)
尝试访问Annotation,因为您要在其中定义;
// MZ: Parse the status code annotations
StatusCode statusCodes = method.getAnnotation(StatusCode.class);
if (statusCodes != null)
{
for (StatusCodesArray statusCodeArray : statusCodes.value())
{
// MZ: Do your magic
}
}
Gl!