[英]Reflection: Find an object with inner field value
我們如何從ArrayList
過濾出單個對象,我們知道內部類型類,類成員( Field
)及其值?
偽代碼:
class MyType {
public String TITLE;
public int ID;
}
ArrayList<MyType> myArray; // filled with data
function findRowByColumnValue(ArrayList<T> array, Field column, Object compareValue){
// list all members of "array"
// and compare the inner field "column" to "compareValue"
}
// called like this
findRowByColumnValue(myArray, MyType.class.getField("ID"), 2);
這是一種通用方法,可以執行所需的操作,除了傳遞字段名而不是Field
本身,因為這樣可以確保Field和Class對齊。 考慮一個混合了不同類實例的列表,每個類都是MyClass類型(但可能是子類)-每個類可以為給定的列名稱使用不同的Field。
static <T> List<T> findRowByColumnValue(List<T> array, String column, Object compareValue){
List<T> hits= new ArrayList<T>();
for (T element : array) {
if (element != null && compareValue.equals(
element.getClass().getField(column).get(element))
hits.add(element);
}
return hits;
}
您可以通過為給定的Class等緩存字段進行優化,但是除非您發現性能問題,否則我不會這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.