将值put到到HasMap中,其中HasMap中的key要与你准备反射的javabean里的属性字段一致。如你的javabean是这样的:
public class TUsers implements java.io.Serializable{
private String id;
private String name;
private String pwd;
......set()/get().....
}
那你的HashMap就应该是:
HashMap map = new HashMap();
map.put("id","1");
map.put("name","tcrct");
map.put("pwd","123");
然后再创建一个方法如:
public static Object parametersToJavaBean(HashMap map,Class cls){
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//取出bean里的所有方法
Method[] methods = cls.getMethods();
for(int i=0; i<methods.length;i++){
//取方法名
String method = methods[i].getName();
//取出方法的类型
Class[] cc = methods[i].getParameterTypes();
if (cc.length != 1) continue;
//如果方法名没有以set开头的则退出本次for
if(method.indexOf("set") < 0 ) continue;
//类型
String type = cc[0].getSimpleName();
try {
//转成小写
Object value = method.substring(3).toLowerCase();
//如果map里有该key
if(map.containsKey(value)){
//调用其底层方法
setValue(type, map.get(value), i, methods, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
/***
* 调用底层方法设置值
*/
private static void setValue(String type, Object value, int i, Method[] method, Object bean){
if (value!=null && !value.equals("")){
try {
if(type.equals("String")){
//第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] {value});
}
else if(type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""+value) });
}
else if(type.equals("long") || type.equals("Long")) {
method[i].invoke(bean, new Object[] { new Long(""+value) });
}
else if(type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean, new Object[] { Boolean.valueOf(""+value) });
}
else if(type.equals("Date")) {
Date date =null;
if(value.getClass().getName().equals("java.util.Date")){
date=(Date) value;
}
else{
String format = ((String)value).indexOf(":")>0?"yyyy-MM-dd hh:mm":"yyyy-MM-dd";
date = Tools.parseDateTime(""+value,format);
}
if(date!=null){
method[i].invoke(bean, new Object[] {date});
}
}
else if(type.equals("byte[]")){
method[i].invoke(bean, new Object[] { new String(value+"").getBytes() });
}
} catch (Exception e) {
System.out.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");
e.printStackTrace();
}
}
}
Tools. parseDateTime()方法:
public static Date parseDateTime(String dateValue,String format)
{
SimpleDateFormat obj = new SimpleDateFormat(format);
try {
return obj.parse(dateValue);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
然后调用该方法:
TUsers vo = new TUsers();
this.parametersToJavaBean(map, vo.getClass())
System.out.println(vo.getId());
System.out.println(vo.getName());
System.out.println(vo.getPwd());