我有一个通用的方法接受类类型和该类的字段进行更新。 对于前:Java泛型 - 类型铸造问题
class A {
private int a;
private int b;
}
class B {
private int c;
private int d;
}
在运行时,如果我们通过类类型为“的A.class”和fieldstoBeUpdated为“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/必需/并发/ memconsist.html)。 – Radiodef