• 反射为单级属性赋值


    简单Java类中的组成较为单一,在赋值中只需要通过反射考虑获取相应的Field与Method实例就可以实现赋值处理,课程主要讲解对于单个VO类实例化对象实现的属性赋值处理操作。
    package com.apple.demo;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;;;
    
    class ClassInstanceFactory{
        private ClassInstanceFactory() {}
        public static <T> T create(Class<?> clazz,String value) {
            try {
                Object obj = clazz.getDeclaredConstructor().newInstance();
                BeanUtils.setValue(obj, value);
                return (T) obj;
            } catch (Exception e) {
                return null;
            }       
        }
    }
    
    class BeanUtils{
        private BeanUtils() {}
        public static void setValue(Object obj, String value) {
            String results[] = value.split("\|");
            for(int x=0;x<results.length;x++) {
                String attval[] = results[x].split(":");
                try {
                    Field field = obj.getClass().getDeclaredField(attval[0]);
                    Method setMethod = obj.getClass().getDeclaredMethod("set"+StringUtils.initcap(attval[0]), field.getType());
                    setMethod.invoke(obj, attval[1]);
                } catch (Exception e) {
                    e.printStackTrace();
                } 
            }
        }
    }
    
    class StringUtils{
        public static String initcap(String str) {
            if(str == null || "".equals(str)) {
                return str;
            }
            if(str.length() == 1) {
                return str.toUpperCase();
            }else {
                return str.substring(0,1).toUpperCase()+str.substring(1);
            }
        }
    }
    
    class Emp{
        private String ename;
        private String job;
        public String getEname() {
            return this.ename;
        }
        public void setEname(String ename) {
            this.ename = ename;
        }
        public String getJob() {
            return this.job;
        }
        public void setJob(String job) {
            this.job = job;
        }
    }
    
    public class JavaReflectDemo {
        public static void main(String[] args) throws Exception{
            String value = "ename:Smith|job:Clerk";
            Emp emp = ClassInstanceFactory.create(Emp.class, value);
            System.out.println("姓名:"+emp.getEname()+"、职位:"+emp.getJob());
        }
    }


    运行结果:
    姓名:Smith、职位:Clerk
  • 相关阅读:
    【C语言】学习笔记8——结构struct(1)
    【算法导论】最大子数组——暴力求解
    【算法导论】最大子数组——递归
    【算法导论】二分查找
    【Linux】Linux服务器(centos7)环境搭建java/python3/nginx
    【算法导论】归并排序
    【C语言】第一个C语言小程序 —— 日期算法和万年历2
    【C语言】第一个C语言小程序 —— 日期算法和万年历
    【python】面向对象
    【java】对jdbc操作结果简单的映射封装
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11220450.html
Copyright © 2020-2023  润新知