81,095
社区成员
发帖
与我相关
我的任务
分享
public void getValues(Object o){
String className=o.getClass().getSimpleName();
if(className.equals("UserForm")){
UserForm form=(UserForm)o;
System.out.println(form.getId());
System.out.println(form.getUsername());
System.out.println(form.getPws());
}
else{
//......
}
}
UserForm userFomr = (UserForm)form;
/**
*
* Description:通过反射填充对象
*
* @param request
* @param obj
* @author 孙钰佳
* @since:2008-1-10 下午02:13:26
*/
public void setObjectFromRequest(String prefix, Object obj, String suffix) {
List list = getFieldList(obj.getClass());
for (int i = 0, size = list.size(); i < size; i++) {
Field field = (Field) list.get(i);
if (field.getName().indexOf("$") > 0)// 忽略代理,cglib
continue;
if (!isBasicType(field.getType()))
continue;
try {
Method setter = com.nstc.util.reflect.ReflectUtil
.getSetter(field);
Class[] ptc = setter.getParameterTypes();
Object val = CastUtil.castValue(getValue(field.getName(),
prefix, suffix), ptc[0]);
if (val != null)
setter.invoke(obj, new Object[] { val });
} catch (SecurityException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
e.printStackTrace();
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
/**
* 取得类的字段
*
* @param c
* @return
*/
private List getFieldList(Class c) {
if (c == null)
return new ArrayList();
List retList = new ArrayList();
Field[] fields = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
retList.add(fields[i]);
}
if (c.getSuperclass() != null
&& c.getSuperclass() != (java.lang.Object.class)) {
fields = c.getSuperclass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
retList.add(fields[i]);
}
}
return retList;
}
/**
* 判断是否是基本数据类型 Description:
*
* @param clazz
* @return
* @author 孙钰佳
* @since:2007-7-4 下午02:59:44
*/
private boolean isBasicType(Class clazz) {
if (clazz.isArray())
return false;
else
return "java.lang".equals(clazz.getPackage().getName())
|| "java.util.Date".equals(clazz.getName());
}
private Object getValue(String name, String prefix, String suffix) {
if (name.equalsIgnoreCase("lastUpdateDate"))
return DateUtil.fmtDateToYMD(new Date());
Object value = null;
if (request != null)
value = request.getParameter(prefix + name + suffix);
if (map != null && (value == null || "".equals(value)))
value = map.get(prefix + name + suffix);
return "".equals(value) ? null : value;
}
/**
*
* Description:将一个Object对象转换为确定的类型 例如Object为String的2007-01-01 Class
* c为Date返回的Object实际为Date类型返回后可强制类型转换,或用于其他不需要明确类型的地方,此方法多用于反射的情况
*
* @param val待确定类型的对象
* @param c目标类型的class
* @return
* @author 孙钰佳
* @since:2008-1-10 下午02:08:38
*/
public static Object castValue(Object val, Class c) {
if (val == null || val.toString().equals("null"))
return null;
if ((java.lang.String.class).equals(c))
return CastUtil.toString(val, null);
if ((java.lang.Integer.class).equals(c) || Integer.TYPE.equals(c))
return CastUtil.toInteger(val, null);
if ((java.lang.Double.class).equals(c) || Double.TYPE.equals(c))
return CastUtil.toDouble(val, null);
if ((java.lang.Short.class).equals(c) || Short.TYPE.equals(c))
return CastUtil.toShort(val, null);
if ((java.lang.Long.class).equals(c) || Long.TYPE.equals(c))
return CastUtil.toLong(val, null);
if ((java.lang.Float.class).equals(c) || Float.TYPE.equals(c))
return CastUtil.toFloat(val, null);
if ((java.lang.Byte.class).equals(c) || Byte.TYPE.equals(c))
return CastUtil.toByte(val, null);
if ((java.lang.Boolean.class).equals(c) || Boolean.TYPE.equals(c))
return CastUtil.toBoolean(val, null);
if ((java.util.Date.class).equals(c)) {
return DateUtil.fmtStrToDate(String.valueOf(val));
}
return null;
}