java对象间值传递

java对象间值传递

java开发过程中,经常会用到将对象a的属性值赋值到对象b,如果用get/set方法,开发工作量大且方法复用性低,java 反射却可以很轻松的解决这个问题,下面是具体实现

   /**
	 * 把对象b的值赋给对象a
	 * 
	 * @param a Object
	 * @param b Object
	 * @return Object
	 */
	public static Object transFields(Object a, Object b) {
		Class c1 = a.getClass();
		Class c2 = b.getClass();

		Field[] fieldsDest = c1.getDeclaredFields();
		Field[] fieldsOrg = c2.getDeclaredFields();

		AccessibleObject.setAccessible(fieldsDest, true);
		AccessibleObject.setAccessible(fieldsOrg, true);

		for (int i = 0; i < fieldsDest.length; i++) {
			Field f = fieldsDest[i];
			Class type = f.getType();
			String name = f.getName();
			String typeName = type.getName();
			for (int j = 0; j < fieldsOrg.length; j++) {
				// 得到数据源的数据
				Field f1 = fieldsOrg[j];
				String name1 = f1.getName();
				String typeName1 = type.getName();
				// 赋值转换
				if (typeName.equals(typeName1) && name1.equals(name) && !"serialVersionUID".equals(name1)) {
					switch (transType(typeName, f1.getType().getName())) {
					case 1:
						try {
							f.set(a, f1.get(b));
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					case 2:
						try {
							f.set(a, f1.get(b) != null ? new java.sql.Date(((java.util.Date) f1.get(b)).getTime())
									: null);
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					case 3:
						try {
							f.setDouble(a, f1.getDouble(b));
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					case 4:
						try {
							f.setInt(a, f1.getInt(b));
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					case 5:
						try {
							f.set(a, f1.get(b) != null ? DateUtil.fdate((String) f1.get(b)) : null);
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					case 6:
						try {

							f.set(a, f1.get(b) != null ? DateUtil.fdate((java.util.Date) f1.get(b)) : null);
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					default:
						try {
							f.set(a, f1.get(b));
						} catch (Exception e) {
							e.printStackTrace();
						}
						break;
					}
				}
			}
		}
		return a;
	}
	/**
	 * 类型转换
	 * 
	 * @param type  Object
	 * @param type1
	 * @return int
	 */
	private static int transType(Object type, Object type1) {
		int typecode;
		typecode = 99;
		if (type.equals("java.lang.String")) {
			typecode = 1;
		} else if (type.equals("double")) {
			typecode = 3;
		} else if (type.equals("int")) {
			typecode = 4;
		} else if (type.equals("java.util.Date") && type1.equals("java.lang.String")) {
			typecode = 5;
		} else if (type1.equals("java.util.Date") && type.equals("java.lang.String")) {
			typecode = 6;
		} else if (type.equals("java.util.Date") && type1.equals("java.util.Date")) {
			typecode = 7;
		}
		return typecode;
	}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值