欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值

程序员文章站 2022-07-04 19:36:29
...

对于此时的Emp类里面会发现所给出的数据类型者没有其它的引用关联了,只是描述了Emp本类的对象,所以这样的设置称为单级设置处理,所以此时应该处理两件事情:

需要通过反射进行指定类对象的实例化处理;
进行内容的设置(Field属性类型、方法名称、要设置的内容);
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时111:单级属性赋值
1、定义StringUtils实现首字母大写功能

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);
		}
	}
}

2、定义BeanUtils工具类,该工具类主要实现属性的设置。

class BeanUtils { // 进行Bean处理的类
	private BeanUtils() {}
	/**
	 * 实现指定对象的属性设置
	 * @param obj 要进行反射操作的实例化对象
	 * @param value 包含有指定内容的字符串,格式“属性:内容|属性:内容”
	 */
	public static void setValue(Object obj,String value) {
		String results [] = value.split("\\|"); // 按照“|”进行每一组属性的拆分
		for (int x = 0; x < results.length; x++) { // 循环设置属性内容
			// attval[0]保存的是属性名称、attval[1]保存的是属性内容
			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]); // 调用setter方法设置内容
			} catch (Exception e) {}
		}
	}
}

3、ClassInstanceFactory 负责实例化对象并且调用BeanUtils类实现属性内容的设置。

class ClassInstanceFactory {
	private ClassInstanceFactory() {}
	/**
	 * 实例化对象的创建方法,该对象可以根据传入的字符串结构“属性:内容|属性:内容”
	 * @param clazz 要进行反射实例化的Class类对象,有Class就可以反射实例化对象
	 * @param value 要设置给对象的属性内容
	 * @return 一个已经配置好属性内容的简单Java类对象
	 */
	public static <T> T create(Class<?> clazz,String value) {
		try { // 如果要想采用反射进行简单Java类对象属性设置的时候,类中必须要有无参构造
			Object obj = clazz.getDeclaredConstructor().newInstance();
			BeanUtils.setValue(obj, value); // 通过反射设置属性
			return (T) obj ; // 返回对象
		} catch (Exception e) {
			e.printStackTrace(); // 如果此时真的出现了错误,本质上抛出异常也没用
			return null ;
		}
	}
}

即使现在类中的属性再多,那么也可以轻松的实现setter的调用(类对象实例化处理)。

相关标签: 阿里Java学习路线

推荐阅读