利用JAVA反射,动态给某个对象实体的某个成员变量赋值或者获取某个成员变量的值

这两个方法我用到了一个开源java工具类,还是比较好用的。具体地址为:Hutool有兴趣的可以看一下。

我主要用这个工具类(Hutool)做了一个日期转换,工具的当中的因为时间关系,没有写的太全,主要涉及一些常用的。

/**
 *  动态的给某个实体,某个属性赋值
 * @param entity 实体的名字
 * @param setName 所要赋值的属性的名称
 * @param setValue 所要赋值的属性的值
 * @param format 需要指定传入日期的格式

 */

@SuppressWarnings("unchecked")
public static  void setV(T entity,String setName,String setValue,String format) {  
	Class clazz = (Class) entity.getClass();  
	//获取所有的bean中所有的成员变量  
	Field[] fields = clazz.getDeclaredFields();
	try {
		for (int j = 0; j < fields.length; j++) { // 遍历所有属性
			String name = fields[j].getName(); // 获取属性的名字
			if(name.equals(setName)){

		 	name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
				String type = fields[j].getGenericType().toString(); // 获取属性的类型
				if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
					Method	m = entity.getClass().getMethod("set"+name,String.class);
					m.invoke(entity, setValue);
				}
				if (type.equals("class java.util.Date")) {
						Method	m = entity.getClass().getMethod("set"+name,Date.class);
						Date date = DateUtil.parse(setValue,format);
						m.invoke(entity, date);		
				}
				if (type.equals("class java.lang.Integer")) {
					Method m = entity.getClass().getMethod("set"+name,Integer.class);
					m.invoke(entity, Integer.valueOf(setValue));
				}
				if (type.equals("class java.lang.Double")) {
					Method	m = entity.getClass().getMethod("set"+name,Double.class);
					m.invoke(entity, Double.valueOf(setValue));
				}
				if (type.equals("class java.lang.Long")) {
					Method	m = entity.getClass().getMethod("set"+name,Long.class);
					m.invoke(entity, Long.valueOf(setValue));
				}
				if (type.equals("class java.lang.Boolean")) {
					Method	m = entity.getClass().getMethod("set"+name,Boolean.class);
					m.invoke(entity, Boolean.valueOf(setValue));
				}
			}
		}
	} catch (NoSuchMethodException e) {
		e.printStackTrace();
	} catch (SecurityException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	} catch (IllegalArgumentException e) {
		e.printStackTrace();
	} catch (InvocationTargetException e) {
		e.printStackTrace();
	}
}
/**
 *  动态的获取某个属性的某个实体的值
 * @param entity 实体的名字
 * @param getName 要获取值的某个属性的名称 
 * @return 属性具体的值,当没有值得时候返回null
 */

@SuppressWarnings("unchecked")
public static  Object getV(T entity,String getName){  
	Class clazz = (Class) entity.getClass();  
	//获取所有的bean中所有的成员变量  
	Field[] fields = clazz.getDeclaredFields();
	try {
		for (int j = 0; j < fields.length; j++) { // 遍历所有属性
			String name = fields[j].getName(); // 获取属性的名字
			if(name.equals(getName)){
 			name = name.substring(0, 1).toUpperCase() + name.substring(1); // 将属性的首字符大写,方便构造get,set方法
				String type = fields[j].getGenericType().toString(); // 获取属性的类型
				if (type.equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class ",后面跟类名
					Method m = entity.getClass().getMethod("get" + name);
					String value = (String) m.invoke(entity); // 调用getter方法获取属性值
					return value;
				}
				if (type.equals("class java.util.Date")) {
					Method m = entity.getClass().getMethod("get" + name);
					Date value = (Date) m.invoke(entity);
					Date val = DateUtil.parse(DateUtil.formatDate(value));
					return val;
				}
				if (type.equals("class java.lang.Integer")) {
					Method m = entity.getClass().getMethod("get" + name);
					Integer value = (Integer) m.invoke(entity);
					return value;
				}
				if (type.equals("class java.lang.Double")) {
					Method m = entity.getClass().getMethod("get" + name);
					Double value = (Double) m.invoke(entity);
					return value;
				}
				if (type.equals("class java.lang.Long")) {
					Method m = entity.getClass().getMethod("get" + name);
					Long value = (Long) m.invoke(entity);
					return value;
				}
				if (type.equals("class java.lang.Boolean")) {
					Method m = entity.getClass().getMethod("get" + name);
					Boolean value = (Boolean) m.invoke(entity);
					return value;
				}
			}
		}
	} catch (NoSuchMethodException e) {
		e.printStackTrace();
	} catch (SecurityException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	} catch (IllegalArgumentException e) {
		e.printStackTrace();
	} catch (InvocationTargetException e) {
		e.printStackTrace();
	}
	return null;
}



你可能感兴趣的:(利用JAVA反射,动态给某个对象实体的某个成员变量赋值或者获取某个成员变量的值)