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

标签 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

从某种意义上说,我想识别类并为它们创建对象,并将它们放在 Objectx 的通用 ArrayList 中。

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

最佳答案

对于任何类(例如 Class X extends 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”行中,方法是检查那里的实际属性值,然后适本地将类分配给列表。

关于java - 如何检查类的注释是否属于特定类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309462/

相关文章:

java - 如何为新的 java 项目生成 build.xml?

java - 基于 Spark 的应用程序在 JDK 8 中失败?

java - Jasper 报告 - 如何更改 xpath 执行器工厂

c# - Reflection.Emit - IL - 对象上的调用方法

java - 对于动态变化的元素,哪个定位器的跨浏览器可靠率更高以及为什么: cssSelector or Xpath?

class - 代号一图形调用方法

css - 您可以在加载时更改 css 类优先级吗?

C++ 类成员函数 : how to write these functions?

c# - .NET 反射中的转换

c# - Type.GetType(string typeName) 返回 null