当我反思时,我怎么知道最后一个物体?

时间:2016-07-26 08:08:02

标签: java reflection

我有这样的DTO,

ADto{
  BDto bDto;
  Cto cDto;
}

BDto{
  String a1;
  String b1;
  int b1;
}

CDto{
  String a2;
  String b2;
  int b2;
}

当我使用反射时,我想在BDto Object.Code中得到CDtoADto,如下所示:

 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中的所有字符串值?我该如何实现?或者,如何知道我必须在没有硬代码的情况下进行递归遍历的字段?

2 个答案:

答案 0 :(得分:0)

您可以直接尝试从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 );

答案 1 :(得分:0)

希望这有帮助

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);
        }
    }
}

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