我有一个通用方法,可以接受类类型和需要更新的该类字段。
例如:class A {
private int a;
private int b;
}
class B {
private int c;
private int d;
}
在运行时,如果我们传递类类型为"A.class"和要更新的字段为"b",那么访问该特定类的字段getter/setter的最佳方法是什么,以便我们可以修改这些字段。
public <T> void find(T clazz, List<String> fieldsToBeUpdated) {
List<T> collectionList = findAll((Class<T>) clazz);
collectionList.parallelStream().forEach(p -> {
if (clazz instanceof A) {
fieldsToBeUpdated.parallelStream().forEach(classFieldName -> {
switch(classFieldName) {
case "a":((A)p).setA(10);
break;
case "b":((A)p).setB(20);
break;
}
});
}
if (clazz instanceof B) {
fieldsToBeUpdated.parallelStream().forEach(classFieldName -> {
switch(classFieldName) {
case "c":((B)p).setC(30);
break;
case "d":((B)p).setD(40);
break;
}
});
}
});
}
我已经编写了以上代码来实现相同的功能。但问题在于,我有30个这样的类需要作为参数传递到这个通用方法中,并且需要更新/修改该类的字段列表。
写30个 if 语句检查类类型,然后将对象强制转换为该类并不是正确的实现方式。
有没有更好的方法来实现相同的功能?
提前致谢。
parallelStream
的好方法。您没有那么多字段需要更新,因此性能可能更差,并且您的forEach
lambda[修改共享状态而没有任何线程安全性](https://docs.oracle.com/javase/tutorial/essential/concurrency/memconsist.html)。 - Radiodef