基于java反射筛选List对于不同实体泛型的公共方法

来源:互联网 发布:gif制作软件 编辑:程序博客网 时间:2024/06/03 16:40

前提:在最近做的项目当中有个奇葩的需要,就是需要将已知的list<实体类>进行一次筛选,查找list里面属性中的值是否包含某个值(模糊查询)。将符合要求的对象添加到一个list1里面,从而生成一个新的
list1<实体类>。
在上面的需求当中主要的就是需要在实现这个方法中,能将其需求抽离出来,不管实体类到底是哪个实体类都能调用该方法。
所以我们在设置方法的时候需要传递2个参数,1.要筛选的list<实体>,2.需要匹配的字段str,那么方法返回的是新的list。或者我们在调用方法之前遍历list<实体类>设置方法的2个参数,1.参数为list<实体类>.get(i),2.需要匹配的字段str,那么返回的是布尔类型。在调用方法的外面去add新的list。
按照上面设置的思路我们进行编写代码
情况1:
按照上面的描述。我们在编写公共方法时,传递的参数为要筛选的list<实体>,需要匹配的字段str

    public static List<Object> testClass(List<Object> object,String str)

这里写图片描述
因为是公共方法 所以在我们的方法中不能去具体的规定List的泛型。上面的方法做会出现参数类型的报错。
所以情况1不是那么合适。
情况2:在情况2中设置的方法为:

    public static boolean testClass(Object object,String string)

调用方法时:
这里写图片描述
所图所示就能完成参数的对应了。接下来看公共方法中的具体实现内容。

package com.lotus.billing.utils;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;/** * 用来将原来的list列表数据转化筛选的工具类  ListFilter.java * @author HQ L * TIME :2017年9月27日09:54:24 */public class ListFilter {    /**    *<p>    *实现list筛选的公共方法    *</p>    *@param Object 传入进行筛选的的类    *@param string 匹配字符串    *return boolean 返回参数true或者false判断是否存在要筛选的字符串    */    public static boolean testClass(Object object,String string) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{            //通过反射getClass获取传入参数对象的实体类            Class class1 = object.getClass();            //获取传入参数的属性             Field[] fields = class1.getDeclaredFields();             //将所有属性值拼接在一起成为新的字符串             String sb = new String();             for (Field field : fields){             //获取get方法                 Method m = (Method) class1.getMethod(                           "get" +field.getName());                 //拼接字符串                 sb = sb+m.invoke(object);             }             //调用字符串检查的方法            return fuzzyFiltering(sb, string);        }     public static boolean fuzzyFiltering(String searchText,String str){            if(!"".equals(searchText)&&searchText!=null){                if(searchText.indexOf(str) !=-1){                    return true;                }            }            return false;        }}

@我家女人从不撒娇 可以@我一起学习讨论

阅读全文
0 0
原创粉丝点击