访问父项的属性注释

时间:2012-12-24 10:54:32

标签: java reflection

说我有两个以下的课程

class Parent extends MyBase {
    @Annot(key="some.key", ref=Child.class)
    public List<Child> children = new List<Child>();
}

class Child extends MyBase {
    @Annot(key="another.key")
    public String id;
}

现在说我有

  • Parent类对象=&gt; parent
  • Child列表中包含3个children类对象。

这意味着可以访问parent.children.get(0).id。 现在我需要形成属性 id 键序列 。 此处Key Sequencekey注释的所有@Annot值的连接字符串。 例如,在这种情况下,键序列为 some.key/another.key

通过java反射完成任务吗?

1 个答案:

答案 0 :(得分:0)

这是一种不使用children中对象的方法。它检查子类的泛型类型并扫描此类以查找注释。

    Field childrenField = Parent.class.getField("children");
    Annotation[] annotations = childrenField.getDeclaredAnnotations();

    String key = null;
    for (Annotation annotation : annotations) {
        if (annotation instanceof Annot) {
            Annot a = (Annot) annotation;
            key = a.key();
            break;
        }
    }

    ParameterizedType type = (ParameterizedType) childrenField.getGenericType();
    Class<?> c = (Class<?>) type.getActualTypeArguments()[0];
    annotations = c.getDeclaredField("id").getAnnotations();
    for (Annotation annotation : annotations) {
        if (annotation instanceof Annot) {
            Annot a = (Annot) annotation;
            key += "/" + a.key();
            break;
        }
    }

    System.out.println(key);

有关注释的详情,请参阅this guide