我有这样的DTO,
ADto{
BDto bDto;
Cto cDto;
}
BDto{
String a1;
String b1;
int b1;
}
CDto{
String a2;
String b2;
int b2;
}
当我使用反射时,我想在BDto
Object.Code中得到CDto
和ADto
,如下所示:
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
中的所有字符串值?我该如何实现?或者,如何知道我必须在没有硬代码的情况下进行递归遍历的字段?
答案 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);
}
}
}
根据评论编辑。请注意,您的对象不应具有循环依赖关系。