BeanUtils类的方法求指教? 实现BeanUtils类的两个copyProperty方法(我是初学者,见笑了) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看吧: public void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException { if(dest == null) throw new IllegalArgumentException("No destination bean specified"); if(orig == null) throw new IllegalArgumentException("No origin bean specified"); if(log.isDebugEnabled()) log.debug("BeanUtils.copyProperties(" + dest + ", " + orig + ")"); if(orig instanceof DynaBean) { DynaProperty origDescriptors[] = ((DynaBean)orig).getDynaClass().getDynaProperties(); for(int i = 0; i < origDescriptors.length; i++) { String name = origDescriptors[i].getName(); if(getPropertyUtils().isWriteable(dest, name)) { Object value = ((DynaBean)orig).get(name); copyProperty(dest, name, value); } } } else if(orig instanceof Map) { for(Iterator names = ((Map)orig).keySet().iterator(); names.hasNext();) { String name = (String)names.next(); if(getPropertyUtils().isWriteable(dest, name)) { Object value = ((Map)orig).get(name); copyProperty(dest, name, value); } } } else { PropertyDescriptor origDescriptors[] = getPropertyUtils().getPropertyDescriptors(orig); for(int i = 0; i < origDescriptors.length; i++) { String name = origDescriptors[i].getName(); if(!"class".equals(name) && getPropertyUtils().isReadable(orig, name) && getPropertyUtils().isWriteable(dest, name)) try { Object value = getPropertyUtils().getSimpleProperty(orig, name); copyProperty(dest, name, value); } catch(NoSuchMethodException e) { } } } } public void copyProperty(Object bean, String name, Object value) throws IllegalAccessException, InvocationTargetException { if(log.isTraceEnabled()) { StringBuffer sb = new StringBuffer(" copyProperty("); sb.append(bean); sb.append(", "); sb.append(name); sb.append(", "); if(value == null) sb.append("<NULL>"); else if(value instanceof String) sb.append((String)value); else if(value instanceof String[]) { String values[] = (String[])value; sb.append('['); for(int i = 0; i < values.length; i++) { if(i > 0) sb.append(','); sb.append(values[i]); } sb.append(']'); } else { sb.append(value.toString()); } sb.append(')'); log.trace(sb.toString()); } Object target = bean; int delim = name.lastIndexOf('.'); if(delim >= 0) { try { target = getPropertyUtils().getProperty(bean, name.substring(0, delim)); } catch(NoSuchMethodException e) { return; } name = name.substring(delim + 1); if(log.isTraceEnabled()) { log.trace(" Target bean = " + target); log.trace(" Target name = " + name); } } String propName = null; Class type = null; int index = -1; String key = null; propName = name; int i = propName.indexOf('['); if(i >= 0) { int k = propName.indexOf(']'); try { index = Integer.parseInt(propName.substring(i + 1, k)); } catch(NumberFormatException e) { } propName = propName.substring(0, i); } int j = propName.indexOf('('); if(j >= 0) { int k = propName.indexOf(')'); try { key = propName.substring(j + 1, k); } catch(IndexOutOfBoundsException e) { } propName = propName.substring(0, j); } if(target instanceof DynaBean) { DynaClass dynaClass = ((DynaBean)target).getDynaClass(); DynaProperty dynaProperty = dynaClass.getDynaProperty(propName); if(dynaProperty == null) return; type = dynaProperty.getType(); } else { PropertyDescriptor descriptor = null; try { descriptor = getPropertyUtils().getPropertyDescriptor(target, name); if(descriptor == null) return; } catch(NoSuchMethodException e) { return; } type = descriptor.getPropertyType(); if(type == null) { if(log.isTraceEnabled()) log.trace(" target type for property '" + propName + "' is null, so skipping ths setter"); return; } } if(log.isTraceEnabled()) log.trace(" target propName=" + propName + ", type=" + type + ", index=" + index + ", key=" + key); if(index >= 0) { Converter converter = getConvertUtils().lookup(type.getComponentType()); if(converter != null) { log.trace(" USING CONVERTER " + converter); value = converter.convert(type, value); } try { getPropertyUtils().setIndexedProperty(target, propName, index, value); } catch(NoSuchMethodException e) { throw new InvocationTargetException(e, "Cannot set " + propName); } } else if(key != null) { try { getPropertyUtils().setMappedProperty(target, propName, key, value); } catch(NoSuchMethodException e) { throw new InvocationTargetException(e, "Cannot set " + propName); } } else { Converter converter = getConvertUtils().lookup(type); if(converter != null) { log.trace(" USING CONVERTER " + converter); value = converter.convert(type, value); } try { getPropertyUtils().setSimpleProperty(target, propName, value); } catch(NoSuchMethodException e) { throw new InvocationTargetException(e, "Cannot set " + propName); } } } 求 JAVA编程思想的第四版课后习题的电子版答案 java有趣的小题,无分看题 从“双重检查成例”引出的一个关于线程安全的疑惑 throw new ArithmeticException(); 与 throw new Exception(); 的区别 java ServerSocket 的TCP通信是怎么实现的? 菜鸟求救:关于Java文件读取 祝福JAVA版的所有朋友开心快乐,中秋快乐~~ 有关JTree的刷新问题 APPLET中用jdbc 构造函数是在解析还是初始化阶段执行?? 菜鸟提问,成员变量和局部变量的定义 求前辈们的经验:socket同时在线的人数
看吧:
public void copyProperties(Object dest, Object orig)
throws IllegalAccessException, InvocationTargetException
{
if(dest == null)
throw new IllegalArgumentException("No destination bean specified");
if(orig == null)
throw new IllegalArgumentException("No origin bean specified");
if(log.isDebugEnabled())
log.debug("BeanUtils.copyProperties(" + dest + ", " + orig + ")");
if(orig instanceof DynaBean)
{
DynaProperty origDescriptors[] = ((DynaBean)orig).getDynaClass().getDynaProperties();
for(int i = 0; i < origDescriptors.length; i++)
{
String name = origDescriptors[i].getName();
if(getPropertyUtils().isWriteable(dest, name))
{
Object value = ((DynaBean)orig).get(name);
copyProperty(dest, name, value);
}
} } else
if(orig instanceof Map)
{
for(Iterator names = ((Map)orig).keySet().iterator(); names.hasNext();)
{
String name = (String)names.next();
if(getPropertyUtils().isWriteable(dest, name))
{
Object value = ((Map)orig).get(name);
copyProperty(dest, name, value);
}
} } else
{
PropertyDescriptor origDescriptors[] = getPropertyUtils().getPropertyDescriptors(orig);
for(int i = 0; i < origDescriptors.length; i++)
{
String name = origDescriptors[i].getName();
if(!"class".equals(name) && getPropertyUtils().isReadable(orig, name) && getPropertyUtils().isWriteable(dest, name))
try
{
Object value = getPropertyUtils().getSimpleProperty(orig, name);
copyProperty(dest, name, value);
}
catch(NoSuchMethodException e) { }
} }
} public void copyProperty(Object bean, String name, Object value)
throws IllegalAccessException, InvocationTargetException
{
if(log.isTraceEnabled())
{
StringBuffer sb = new StringBuffer(" copyProperty(");
sb.append(bean);
sb.append(", ");
sb.append(name);
sb.append(", ");
if(value == null)
sb.append("<NULL>");
else
if(value instanceof String)
sb.append((String)value);
else
if(value instanceof String[])
{
String values[] = (String[])value;
sb.append('[');
for(int i = 0; i < values.length; i++)
{
if(i > 0)
sb.append(',');
sb.append(values[i]);
} sb.append(']');
} else
{
sb.append(value.toString());
}
sb.append(')');
log.trace(sb.toString());
}
Object target = bean;
int delim = name.lastIndexOf('.');
if(delim >= 0)
{
try
{
target = getPropertyUtils().getProperty(bean, name.substring(0, delim));
}
catch(NoSuchMethodException e)
{
return;
}
name = name.substring(delim + 1);
if(log.isTraceEnabled())
{
log.trace(" Target bean = " + target);
log.trace(" Target name = " + name);
}
}
String propName = null;
Class type = null;
int index = -1;
String key = null;
propName = name;
int i = propName.indexOf('[');
if(i >= 0)
{
int k = propName.indexOf(']');
try
{
index = Integer.parseInt(propName.substring(i + 1, k));
}
catch(NumberFormatException e) { }
propName = propName.substring(0, i);
}
int j = propName.indexOf('(');
if(j >= 0)
{
int k = propName.indexOf(')');
try
{
key = propName.substring(j + 1, k);
}
catch(IndexOutOfBoundsException e) { }
propName = propName.substring(0, j);
}
if(target instanceof DynaBean)
{
DynaClass dynaClass = ((DynaBean)target).getDynaClass();
DynaProperty dynaProperty = dynaClass.getDynaProperty(propName);
if(dynaProperty == null)
return;
type = dynaProperty.getType();
} else
{
PropertyDescriptor descriptor = null;
try
{
descriptor = getPropertyUtils().getPropertyDescriptor(target, name);
if(descriptor == null)
return;
}
catch(NoSuchMethodException e)
{
return;
}
type = descriptor.getPropertyType();
if(type == null)
{
if(log.isTraceEnabled())
log.trace(" target type for property '" + propName + "' is null, so skipping ths setter");
return;
}
}
if(log.isTraceEnabled())
log.trace(" target propName=" + propName + ", type=" + type + ", index=" + index + ", key=" + key);
if(index >= 0)
{
Converter converter = getConvertUtils().lookup(type.getComponentType());
if(converter != null)
{
log.trace(" USING CONVERTER " + converter);
value = converter.convert(type, value);
}
try
{
getPropertyUtils().setIndexedProperty(target, propName, index, value);
}
catch(NoSuchMethodException e)
{
throw new InvocationTargetException(e, "Cannot set " + propName);
}
} else
if(key != null)
{
try
{
getPropertyUtils().setMappedProperty(target, propName, key, value);
}
catch(NoSuchMethodException e)
{
throw new InvocationTargetException(e, "Cannot set " + propName);
}
} else
{
Converter converter = getConvertUtils().lookup(type);
if(converter != null)
{
log.trace(" USING CONVERTER " + converter);
value = converter.convert(type, value);
}
try
{
getPropertyUtils().setSimpleProperty(target, propName, value);
}
catch(NoSuchMethodException e)
{
throw new InvocationTargetException(e, "Cannot set " + propName);
}
}
}