动态实例化类

使用org.apache.commons.beanutils.BeanUtils 对类进行操作,需要对类进行实例化,如果要写一个通用的功能,则要实现动态实例化类,下面的例子

使用java反射机制对类进行实例化

首先是一个工具类,反射机制实现对属性赋值

public class ReflectMatch {
public static void fill(Object bean, Field field, Method method, Object value) {
if (value == null)
return;
try {
Object[] oo = new Object[1];
String type = field.getType().getName();
if ("java.lang.String".equals(type)) {
oo[0] = value;
} else if ("java.lang.Integer".equals(type)) {
value = (Integer) value;
oo[0] = value;
} else if ("java.lang.Float".equals(type)) {
value = (Float) value;
oo[0] = value;
} else if ("java.lang.Double".equals(type)) {
value = (Double) value;
oo[0] = value;
} else if ("java.math.BigDecimal".equals(type)) {
value = (BigDecimal) value;
oo[0] = value;
} else if ("java.util.Date".equals(type)) {
oo[0] = value;
} else if ("java.sql.Timestamp".equals(type)) {
oo[0] = value;
} else if ("java.lang.Boolean".equals(type)) {
value = (Boolean) value;
oo[0] = value;
} else if ("java.lang.Long".equals(type)) {
value = (Long) value;
oo[0] = value;
} else {
oo[0] = value;
}
method.invoke(bean, oo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
利用上面的工具类,实现对类的实例化
	public Object instance(Object o) throws Exception {
		if (o == null) {
			o = o.getClass().newInstance();
		}
		Field[] fields = getAllField(o);
		for (Field field : fields) {
			if (isLeaf(field)) {
				continue;
			}
			String filedName = field.getName().substring(1);
			Method[] methods = getAllMethod(o);
			for (Method me : methods) {
				String meth = me.getName();
				if (meth != null && "set".equals(meth.substring(0, 3)) && Modifier.isPublic(me.getModifiers()) && ("set" + Character.toUpperCase(filedName.charAt(0)) + filedName.substring(1)).equals(meth)) {
					Object fieldObject = null;
					if (isType(field)) {// 这里实现对特殊类型的实例化
						String className = field.getType().getName();
						fieldObject = this.getTypeInstance(className);
					} else {
						fieldObject = field.getType().newInstance();
					}
					ReflectMatch.fill(o, field, me, fieldObject);
					System.out.println(filedName);
					instance(fieldObject);
					break;
				}
			}
		}
		return o;
	}




这样就是先了类的实例化,就可以使用beanutils的api对 属性.属性.属性.属性进行赋值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值