我有一个这样的DTO,
ADto{
BDto bDto;
Cto cDto;
}
BDto{
String a1;
String b1;
int b1;
}
CDto{
String a2;
String b2;
int b2;
}
当我使用反射时,我想在ADto
对象中获得BDto
和CDto
。代码如下:
for (Field field : aObj.getClass().getDeclaredFields()) {
try {
Object fieldValue = field.get(object);
//todo how to collect all String value in `BDto` and `CDto` of aObj
if (fieldValue instanceof String) {
shouldCheckFieldValues.add((String) fieldValue);
}
} catch (Exception e) {
logger.error("some error has happened when fetch data in loop", e);
}
}
}
我想收集aObj的BDto
和CDto
中的所有String值?我怎样才能做到这一点?或者,在没有硬代码的情况下,我如何知道必须递归遍历的字段?
您直接尝试从ADto类中获取String属性,但无法。
首先获取BDto属性,然后检索Strings属性。对CDto属性执行相同操作
for (Field field : aObj.getClass().getDeclaredFields()) {
try {
Object fieldValue = field.get(object);
//todo how to collect all String value in `BDto` and `CDto` of aObj
if (fieldValue instanceof BDto) {
for (Field field2 : fieldValue.getClass().getDeclaredFields())
if (field2 instanceof String) {
shouldCheckFieldValues.add((String) field2 );
希望这能帮助
static void exploreFields(Object aObj) {
for (Field field : aObj.getClass().getDeclaredFields()) {
try {
Object instance_var = field.get(aObj);
if (instance_var instanceof String) {
System.out.println(instance_var);
} else if(!(instance_var instanceof Number)) {
exploreFields(instance_var);
}
} catch (Exception e) {
logger.error("some error has happened when fetch data in loop", e);
}
}
}
根据评论编辑。请注意,您的对象不应该具有循环依赖关系。