zoukankan      html  css  js  c++  java
  • 反射为单级属性赋值

    简单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
  • 相关阅读:
    软件工程第三次作业
    软件工程第二次作业
    Java基础篇
    2018软件工程第一次作业
    网络基础知识(http请求)
    linux命令
    添加电子称程序
    多线程Demo
    关闭一个winform窗体刷新另外一个
    通过WebApi取出XML数据
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11220450.html
Copyright © 2011-2022 走看看