首页 > 其他 > 详细

31 反射方式给类的属性赋值

时间:2017-01-23 15:23:15      阅读:129      评论:0      收藏:0      [点我收藏+]

1、配置类

package com.da.tool.util.configuration.reflect;

/**
 */
public class JobInfo {

    private String jobName;

    private String jobId;

    public String getJobName() {
        return jobName;
    }

    public void setJobName(String jobName) {
        this.jobName = jobName;
    }

    public String getJobId() {
        return jobId;
    }

    public void setJobId(String jobId) {
        this.jobId = jobId;
    }
}


package com.da.tool.util.configuration.reflect;

/**
 */
public class TimedJob extends JobInfo {


    private String startTime;

    private String stopTime;

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getStopTime() {
        return stopTime;
    }

    public void setStopTime(String stopTime) {
        this.stopTime = stopTime;
    }
}

2、反射类

 

package com.da.tool.util.configuration.reflect;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.Properties;
import java.util.Set;

/**
 */
public class Reflect {


    public static void main(String[] args) {


        Properties prop = new Properties();
        prop.setProperty("jobName", "timingJob");
        prop.setProperty("jobId", "1");
        prop.setProperty("startTime", String.valueOf(new Date().getTime()));
        prop.setProperty("stopTime", String.valueOf(new Date().getTime() + 1000 * 60 * 60 * 24));

        JobInfo jobInfo = (JobInfo) setTarget(prop,new TimedJob());

        TimedJob timedJob=(TimedJob) jobInfo;

        System.out.println("jobName = " + timedJob.getJobName());
        System.out.println("jobId = " + timedJob.getJobId());
        System.out.println("startTime = " + timedJob.getStartTime());
        System.out.println("stopTime = " + timedJob.getStopTime());




    }

    /**
     * 给实例instance的属性赋值
     *
     * @param prop
     * @param instance
     * @return
     */
    public static Object setTarget(Properties prop, Object instance) {

        Set<Object> keys = prop.keySet();

        for (Object key : keys) {

            String name = String.valueOf(key);

            String value = prop.getProperty(String.valueOf(key));

            try {
                Method method=instance.getClass().getMethod("set" + upperFirstChar(name), String.class);
                method.invoke(instance,value);
            } catch (NoSuchMethodException e) {
                //set方法不存在
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                //
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }}
        return instance;
    }

    /**
     * 将字符串的首字母大写
     *
     * @param string
     * @return
     */
    public static String upperFirstChar(String string) {
        return string.substring(0, 1).toUpperCase() + string.substring(1);
    }
}

 

 

jobName = timingJob
jobId = 1
startTime = 1485152366304
stopTime = 1485238766304

 

31 反射方式给类的属性赋值

原文:http://www.cnblogs.com/yangh2016/p/6344028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!