我有一個通用的方法接受類類型和該類的字段進行更新。 對於前: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