这是我获取字段值和注释值的代码,我将值放入地图中,但问题是地图中有$this
。
Map doc = null;
String kind = null;
Class classObj = obj.getClass();
Annotation[] annotations = classObj.getAnnotations();
for (Annotation annotation : annotations) {
Entity entityAnnotation = (Entity)annotation;
kind = entityAnnotation.name();
if (entityAnnotation != null){
if (doc == null){
doc = new LinkedHashMap();
}
Field[] fields = classObj.getDeclaredFields();
for (Field field : fields){
annotations = field.getDeclaredAnnotations();
String value = null;
String fieldName = field.getName();
try {
boolean access = field.isAccessible();
field.setAccessible(true);
Object fieldValue = field.get(obj);
doc.put(fieldName, fieldValue);
field.setAccessible(access);
} catch (Exception e) {
e.printStackTrace();
}
// Process fields with annotation
for(Annotation fieldAnnotation : annotations){
if (annotation instanceof Id){
Id idAnnotation = (Id) fieldAnnotation;
log.info("Field name="+fieldName+" "+ value + " Annotation value: " + idAnnotation.value());
doc.put("_id", value);
}
}
}
}
}
测试输出:
Key=id value=id1
Key=name value=Eli
Key=age value=25
Key=this$0 value=org.goo.AnnotationTest@7f5227
答案 0 :(得分:1)
字段this$0
是对外部类的引用。
如果您想避免这种情况,请创建课程static
。恕我直言,你应该尽可能使嵌套类静态,部分是为了性能,但主要是为了清晰。如果这不是一个选项,您可以明确地忽略该字段。
BTW:如果您创建一个名为this$0
的字段,则会使用字段this$$0
或this$$$0
或this$$$$0
等字段。
答案 1 :(得分:0)
您可以使用获取类变量并存储在Map中。 Field [] fields = YourClassName.class.getFields();