java getDeclaredAnnotations未从注释返回一个属性

时间:2017-12-05 09:51:33

标签: java annotations

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没有检索到这个值,而是返回一个空字符串。

有人可以帮我解决这个问题。

0 个答案:

没有答案