Java 反射:查找具有内部字段值的对象
我们如何从Java 反射:查找具有内部字段值的对象,java,reflection,Java,Reflection,我们如何从ArrayList中筛选出单个对象,在这里我们知道内部类型类、类成员(Field)及其值 伪代码: class MyType { public String TITLE; public int ID; } ArrayList<MyType> myArray; // filled with data function findRowByColumnValue(ArrayList<T> array, Field column, Object co
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);
类MyType{
公共字符串标题;
公共int ID;
}
ArrayList myArray;//充满数据
函数findRowByColumnValue(ArrayList数组、字段列、对象比较值){
//列出“数组”的所有成员
//并将内部字段“column”与“compareValue”进行比较
}
//这样叫
findRowByColumnValue(myArray,MyType.class.getField(“ID”),2);
这里有一个通用方法,它可以执行您想要的操作,除了传入字段名,而不是字段本身,因为这样可以确保字段和类对齐。考虑一个具有不同类的实例的列表,每个类型都是MyClass(但可能是子类)——每个类可以为给定的列名使用不同的字段。
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;
}
静态列表findRowByColumnValue(列表数组、字符串列、对象比较值){
列表点击次数=新建ArrayList();
for(T元素:数组){
if(element!=null&&compareValue.equals(
element.getClass().getField(列).get(元素))
添加(元素);
}
回击;
}
您可以通过缓存给定类的字段来优化,但除非您注意到性能问题,否则我不会首先执行。 这是一个通用的方法,除了您在字段名中传递,而不是<代码>字段本身,您还可以这样做,因为这样您就可以确保字段和类对齐。对于不同类的实例,每个类型都是MyClass(但可能是一个子类)——每个类都可以为给定的列名使用不同的字段
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;
}
静态列表findRowByColumnValue(列表数组、字符串列、对象比较值){
列表点击次数=新建ArrayList();
for(T元素:数组){
if(element!=null&&compareValue.equals(
element.getClass().getField(列).get(元素))
添加(元素);
}
回击;
}
您可以通过缓存给定类等的字段进行优化,但除非您注意到性能问题,否则一开始我不会这样做。谢谢Bohemian,您透露了一些我没有想到的事情。非常好:-)@MarekSebera注:我刚刚注意到一个错误并更正了它:它应该是…get(element)
(而不是…get(column)
)谢谢你的通知!很高兴我这么慢就实现了:)谢谢波希米亚人,你透露了一些我没有想到的事情。非常好:-)@MarekSebera注意:我刚刚注意到一个错误并更正了它:它应该是…get(element)
(不是…get(column)
)谢谢您的通知!很高兴我这么慢就实现了:)