如何检查类的注释是否属于特定类别?

时间:2016-07-11 14:26:41

标签: java class reflection

我的课程注释如下:

@BaseProp(category = Property.CATEGORY1)
where Property is a class defined as  
 public enum Property{
CATEGORY1("category1"), CATTEGORY2("category2");

    public static Property getCategory(String value) {
        return Property
                .valueOf(Optional.ofNullable(value).orElseThrow(IllegalArgumentException::new).toUpperCase());
    }

它有适当的getter,setter,构造函数和方法getCategory()

我在多个包中的其他类注释为

@Prop(category = Property.CATGORY1)

这些类扩展了一个基类。

我想为类创建两个ArrayList个对象 - 1.扩展BaseClass,类别注释为CATEGORY1 2.扩展BaseClass,类别注释为CATEGORY2

从某种意义上说,我想识别这些类并为它们创建对象,并将它们放在ArrayList的{​​{1}} {。}}中。

如何使用反射和Java来做到这一点?

1 个答案:

答案 0 :(得分:2)

对于任何类(例如,Class X扩展BaseClass),请使用类似:

的内容
Class<?> c = X.class;  // or if you have X x, then x.getClass();
for (Annotation ann : c.getAnnotations()) {
  if (ann instanceof BaseProp) {   // make sure it's your annotation
    BaseProp bp = (BaseProp)ann;
    bp.category();  // do something here
  }
}

您需要通过检查那里的实际属性值,然后根据需要将类分配到列表中,将您的决策逻辑放在“// do something here”行中。