簡體   English   中英

反射:查找具有內部字段值的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM