java getDeclaredAnnotations未从注释中返回一个属性。
步骤:
1)注释存在于外部Java类(Carrier.java)中,该类是动态编译和加载的:
@Facets(xpath = "/Carrier/Carrier_Id", displayString = "Carrier")
private String carrier_Id;
2)注释@Facets有这个定义:
@Target(value = { ElementType.FIELD, ElementType.METHOD,ElementType.PARAMETER,
ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Facets {
@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER,
ElementType.TYPE })
@Retention(value = RetentionPolicy.RUNTIME)
public static @interface FacetDefinition {
String xsdAttributeName() default VOID_STRING;
}
@FacetDefinition
String xpath() default VOID_STRING;
@FacetDefinition
String entityName() default VOID_STRING;
3)下面的代码从动态加载的类中检索注释属性 - (Carrier.class):
Annotation[] annotations = field2.getDeclaredAnnotations();
for(Annotation annotation : annotations){
if(annotation instanceof Facets)
{
Facets myAnnotation = (Facets) annotation;
xpath = myAnnotation.xpath();
displayName = myAnnotation.displayString();
}
4)一个属性的值 - 正确返回xpath,但第二个属性 - displayString总是作为空字符串返回。
displayString值出现在Carrier.class文件中:
javap -v Carrier.class
#38 = Utf8 xpath
#39 = Utf8 /Carrier/Carrier_Id
#40 = Utf8 displayString
#41 = Utf8 Carrier
但是getDeclaredAnnotations没有检索到这个值,而是返回一个空字符串。
有人可以帮我解决这个问题。