gpt4 book ai didi

java - 获取字段名称和值并将其存储在映射中

转载 作者:行者123 更新时间:2023-12-01 15:02:56 28 4
gpt4 key购买 nike

这是我用于获取字段值和注释值的代码,我将这些值放入 map 中,但问题是 map 中有一个 $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

最佳答案

字段this$0是对外部类的引用。

如果您想避免这种情况,请将类设为静态。恕我直言,您应该尽可能使嵌套类静态,部分是为了性能,但主要是为了清晰。如果这不是一个选项,您可以显式忽略该字段。

顺便说一句:如果您创建一个名为 this$0 的字段,它将使用字段 this$$0this$$$0 this$$$$0 等等。

关于java - 获取字段名称和值并将其存储在映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375659/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com