用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java的反射机制

2017-05-21 作者: 逻辑与思维举报

[java]代码库

import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
 
public class ReflectionDemo {
 
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) throws Exception {
 
        // 创建一个Properties对象
        Properties prop = new Properties();
 
        while (true) {
 
            // 1.读取配置文件
            prop.load(new FileInputStream("config.properties"));
 
            // 2.获取对应的字节码对象
            Class<Profession> clz = (Class<Profession>) Class.forName(prop.getProperty("classname"));
 
            // 3.创建对应的实例对象
                        //Constructor con=clz.getConstructor();
            Profession p = con.newInstance();
 
            // 4.获取要设置的属性的名字
            String[] attrnames = prop.getProperty("attrname").split("/");
 
            // 5.获取要设置的属性的值
            String[] attrvalues = prop.getProperty("attrvalue").split("/");
 
            // 6. 遍历属性名的数组
            for (int i = 0; i < attrnames.length; i++) {
                //7. 获取当前属性的名字
                String attrname = attrnames[i];
 
                //8. 根据属性名来获取这个属性对象
                Field f = clz.getDeclaredField(attrname);
 
                //9. 获取属性对象的声明类型
                Class fclz = f.getType();
 
                // 10.根据属性的名字来拼接对应的set方法的名字
                String setMethodName = "set" + attrname.substring(0, 1).toUpperCase() + attrname.substring(1);
 
                //11. 获取对应的set方法
                Method setMethod = clz.getMethod(setMethodName, fclz);
 
                // 12.判断属性的类型,执行set方法
                if (fclz == int.class || fclz.equals(Integer.class)) {
                    setMethod.invoke(p, Integer.parseInt(attrvalues[i]));
                } else if (fclz == char.class || fclz.equals(Character.class)) {
                    // setMethod.invoke(p, attrvalues[i].charAt(0));
                    setMethod.invoke(p, attrvalues[i].toCharArray()[0]);
                } else if (fclz.equals(Date.class)) {
                    setMethod.invoke(p, new SimpleDateFormat("yyyy-MM-dd").parse(attrvalues[i]));
                } else {
                    setMethod.invoke(p, attrvalues[i]);
                }
            }
            // 13.获取指定的方法
            Method m = clz.getDeclaredMethod(prop.getProperty("methodname"), null);
 
            // 14.执行指定的方法
            m.invoke(p, null);
             
            Thread.sleep(10000);
        }
    }
}


网友评论    (发表评论)

共19 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...