当我思考时,我怎么能知道最后一个物体



我有一个这样的DTO,

ADto{
  BDto bDto;
  Cto cDto;
}
BDto{
  String a1;
  String b1;
  int b1;
}
CDto{
  String a2;
  String b2;
  int b2;
}

当我使用反射时,我想在ADto对象中获得BDtoCDto。代码如下:

 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的BDtoCDto中的所有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);
        }
    }
}

根据评论编辑。请注意,您的对象不应该具有循环依赖关系。

相关内容

  • 没有找到相关文章

最新更新