栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java使用反射获取set方法,并执行set方法的工具类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java使用反射获取set方法,并执行set方法的工具类

public class MyClassLoader{
    
    public static Class myClassObject(Class tclass) throws ClassNotFoundException {
        return Class.forName(tclass.getCanonicalName());
    }
    
    public static Object myObjectField(Class tclass,Object... objects) throws Exception {
        //获取class对象
        Class aClass = Class.forName(tclass.getCanonicalName());
        //实例化对象
        Object bean  = aClass.newInstance();
        //将数据封装到list集合中
        List list = new ArrayList<>(Arrays.asList(objects));
        //返回非继承的方法
        //获取成员变量
        Field[] fields = aClass.getDeclaredFields();
        PropertyDescriptor descriptor = null;
        for (int i = 0; i < fields.length; i++) {
            //遍历所有方法
            descriptor = new PropertyDescriptor(fields[i].getName(), aClass);
            //得到set方法
            Method setMethod = descriptor.getWriteMethod();
            //执行set方法
            setMethod.invoke(bean, list.get(i));
        }
        return bean;
    }
    
    public static Object myObjectField(Class tclass,List list) throws Exception {
        //获取class对象
        Class aClass = Class.forName(tclass.getCanonicalName());
        //实例化对象
        Object bean  = aClass.newInstance();
        //返回非继承的方法
        //获取成员变量
        Field[] fields = aClass.getDeclaredFields();
        PropertyDescriptor descriptor = null;
        for (int i = 0; i < fields.length; i++) {
            //遍历所有方法
            descriptor = new PropertyDescriptor(fields[i].getName(), aClass);
            //得到set方法
            Method setMethod = descriptor.getWriteMethod();
            //执行set方法
            setMethod.invoke(bean, list.get(i));
        }
        return bean;
    }

    
    public static Object myObjectMapField(Class aClass, Map map) throws Exception {
        Object bean = aClass.newInstance();
        Set> entrySet = map.entrySet();
        for (Map.Entry entry : entrySet) {
            String key = entry.getKey();
            Object value = entry.getValue();
            //获取去key相同的set/get方法
            PropertyDescriptor descriptor = new PropertyDescriptor(key, bean.getClass());
            //获取set方法
            Method method = descriptor.getWriteMethod();
            //获取形参列表内容
            Object value1 = getBeanValue(value, method.getParameterTypes()[0]);
            //执行提交
            method.invoke(bean, value1);
        }
        return bean;
    }
    //通过判断参数类型进行解析
    
    private static Object getBeanValue(Object value, Class type) {
        if (value != null){
            if (type.isAssignableFrom(String.class)){
                return value.toString();
            }else if (type.isAssignableFrom(Integer.class) || type.isAssignableFrom(int.class)){
                return Integer.parseInt(value.toString());
            }else if (type.isAssignableFrom(Double.class) || type.isAssignableFrom(double.class)){
                return Double.parseDouble(value.toString());
            }else if (type.isAssignableFrom(Character.class) || type.isAssignableFrom(char.class)){
                return String.valueOf(value);
            }else if (type.isAssignableFrom(Float.class) || type.isAssignableFrom(float.class)){
                return Float.parseFloat(value.toString());
            }else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class)){
                return Boolean.parseBoolean(value.toString());
            }else if (type.isAssignableFrom(Long.class) || type.isAssignableFrom(long.class)){
                return Long.parseLong(value.toString());
            }else {
                return value.toString();
            }
        }
        return null;
    }
}

 

辅助类

public class BeanClassUtils implements BeanClassLoader{
    @Override
    public Map getMap(Map map) {
        Map map1 = new HashMap<>();
        for (Map.Entry entry : map.entrySet()) {
            String key = entry.getKey();
            Object[] value = entry.getValue();
            for (Object object : value) {
                map1.put(key, object);
            }
        }
        return map1;
    }
    
}

接口

public interface BeanClassLoader {
    Map getMap(Map map);
}

使用

注意传入参数应该与实体类成员顺序一一对应!!!!!
//1.可变参数
User user = (User) MyClassLoader.myObjectField(User.class,"此处传入与实体类成员变量从上到下对应的值");
System.out.println(user);
//2.list集合例如
List list = new ArrayList<>();
        list.add(2);
        list.add("xw");
        list.add("男");
        list.add(12);
        User user = (User) MyClassLoader.myObjectField(User.class, list);
        System.out.println(user);
 

目的对反射进行练习,并简化set写的步骤内容

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号