• 利用反射给JAVABEAN实例赋值


    为简化和统一,需要给javabean实例统一赋值,实现代码如下(已测试)

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import com.xxx.entity.Call;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class ReflectUtils {
        
        @SuppressWarnings("rawtypes")
        public static Map<String,Class> getPoJoFiled(Class cls){
            Map<String,Class> names=new HashMap<>();
            Field[] fileds=cls.getDeclaredFields();
            for(Field filed:fileds){
                names.put(filed.getName(), filed.getType());
            }
            return names;
        }
        
        @SuppressWarnings("rawtypes")
        public static List<String> getSetMethodName(Class cls){
            List<String> methodNames=new ArrayList<>();
            Method[] methods =cls.getDeclaredMethods();
            for(Method method:methods){
                if(method.getName().startsWith("set")){
                    methodNames.add(method.getName());
                }
            }
            return methodNames;
        }
    private static String getMethodNameByField(List<String> methodNames, String filedName) { for (String method : methodNames) { if (method.toLowerCase().equalsIgnoreCase("set" + filedName)) { return method; } } return ""; }
        @SuppressWarnings({ "unchecked", "rawtypes" })
        public static void initInstance(Object instance,String param) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException{
            Class cls=instance.getClass();
            Map<String,Class> fieldNames=ReflectUtils.getPoJoFiled(cls);
            List<String> methodNames=ReflectUtils.getSetMethodName(cls);
            for(Entry<String,Class> field:fieldNames.entrySet()){
                String filedName=field.getKey();
                String methodName=getMethodNameByField(methodNames,filedName);
                Method setMethodName = cls.getMethod(methodName, fieldNames.get(filedName));
                String type=fieldNames.get(filedName).getName();
                  if(type.equals("java.lang.String")) {
                      setMethodName.invoke(instance, new Object[] {param});
                    }
                    else if(type.equals("int") || type.equals("java.lang.Integer")) {
                        setMethodName.invoke(instance, new Object[] {new Integer(param)});
                    }
                    else if(type.equals("long") || type.equals("java.lang.Long")) {
                        setMethodName.invoke(instance, new Object[] {new Long(param)});
                    }else if (type.equals("float") || type.equals("java.lang.Float")) {
                setMethodName.invoke(instance, new Object[]{new Float(param)});

                } else if(type.equals("boolean") || type.equals("java.lang.Boolean")) {

                        setMethodName.invoke(instance, new Object[] { Boolean.valueOf(param) });
                    }
                    else if(type.equals("java.util.Date")) {
                      Date date = DateUtil.parseDateTime(param);
                      if(date!=null)
                          setMethodName.invoke(instance, new Object[] {date});
                    }
            }
        }
        
        
        public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
            String param="20";
            Call call=new Call();
            initInstance(call,param);
            System.out.println(call.toString());
        }

     需要用到的公共类:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    
    public class DateUtil {
        /**
         * 得到当前的时间,自定义时间格式 y 年 M 月 d 日 H 时 m 分 s 秒
         * @param dateFormat 输出显示的时间格式
         * @return
         */
        public final static String defaultFormat = "yyyy-MM-dd HH:mm:ss";
        
        public static String getCurrentDate(String dateFormat) {
            SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
            return sdf.format(new Date());
        }
        
        public static Date parseDateTime(String date){
            SimpleDateFormat formatter = new SimpleDateFormat(defaultFormat);
            Date newDate = null;
            try {
                newDate = formatter.parse(date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return newDate;
        }
    }
  • 相关阅读:
    python中常见的部分错误
    不同类型指针自加所移动位置分析
    c语言,sizeof关键字,数组和指针区别
    数组名和指针能够等价的情况
    typedef与define宏定义用于声明新的类型之间的区别
    老问题了,函数返回指向常字符串的指针,形如 char *func()
    c语言运算符优先级 ., *, (), []
    const char**与char**类型的区别
    char *f[]与char (*f)[]的区别
    标准IO库函数sprintf
  • 原文地址:https://www.cnblogs.com/davidwang456/p/8891013.html
Copyright © 2020-2023  润新知