说我有两个以下的课程
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 Sequence
是key
注释的所有@Annot
值的连接字符串。
例如,在这种情况下,键序列为 some.key/another.key
通过java反射完成任务吗?
答案 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。