用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...