gpt4 book ai didi

java - 如何使我的循环更加通用?

转载 作者:行者123 更新时间:2023-12-01 22:31:16 24 4
gpt4 key购买 nike

下面是我的代码。正如您将看到的,有 2 个几乎相同的代码块。唯一不同的是对象的类型。我正在寻找一种使其更通用的方法。拥有一个代码块,只需将类型(Owner、Car)设置为我的方法中的参数。有什么提示吗?我尝试过使用反射,但我始终无法使其动态化,因为我必须循环遍历集合

if(queryResult.get(0) instanceof Owner) {
classFields = Owner.class.getDeclaredFields();
data = new Object[queryResult.size()][classFields.length];
for(Owner owner : (List<Owner>)(Object)queryResult) {
int rCounter = 0;
for(Field field : owner.getClass().getDeclaredFields()) {
field.setAccessible(true);
try {
data[lCounter][rCounter] = field.get(owner);
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}

rCounter++;
}
lCounter++;
}
} else if(queryResult.get(0) instanceof Car) {
classFields = Car.class.getDeclaredFields();
data = new Object[queryResult.size()][classFields.length];
for(Car car : (List<Car>)(Object)queryResult) {
int rCounter = 0;
for(Field field : car.getClass().getDeclaredFields()) {
field.setAccessible(true);
try {
data[lCounter][rCounter] = field.get(car);
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}

rCounter++;
}
lCounter++;
}
}

最佳答案

您应该能够将整个代码块折叠为:

 Class clazz = queryResult.get(0).getClass();
classFields = clazz.getDeclaredFields();
data = new Object[queryResult.size()][classFields.length];
for(Object result : queryResult) {
int rCounter = 0;
for(Field field : clazzFields) {
field.setAccessible(true);
try {
data[lCounter][rCounter] = field.get(result);
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
rCounter++;
}
lCounter++;
}

警告:我没有编译并运行它来检查

关于java - 如何使我的循环更加通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27692378/

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