我有注释如下的类:
@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,constructor,此方法getCategory()
。
我在多个包中的其他类被注释为
@Prop(category = Property.CATGORY1)
这些类扩展基类。
我想为类创建两个对象ArrayList
-1. 扩展基类,类别被注释为CATEGORY12. 扩展基类和类别注释为CATEGORY2
从某种意义上说,我想识别类并为它们创建对象,并将它们放在Objectx
的一般ArrayList
中。
如何使用反射和 Java 来做到这一点?
对于任何类(例如 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
}
}
您需要将决策逻辑放在"//在此处执行某些操作"行中,方法是检查那里的实际属性值,然后根据需要将类分配给列表。