map转换为java bean对象
map格式Map<String,String>
bean声明在下面
写这个东西的原因就是因为最近上班了,学/用java了,学习了心仪已久的java反射,这里使用它来制作一个简单的map转java bean对象的,小demo.需要你对java 以及java反射机制有简单的了解(我的命名很渣渣^ ^)
//java bean声明
package test;
public class Chen {
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
package test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class Main1 {
public static void main(String[] args) {
Map<String , String> map = new HashMap<String, String>();
map.put("name", "小陈");
map.put("sex", "man");
map.put("age", "10");
Chen chen = null;
try {
chen = (Chen) objectSwitch(map, Chen.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.printf("%s %s %s\n",chen.getName() , chen.getSex() , chen.getAge());
}
private static Object objectSwitch(Map<String ,String> map , Class c) throws Exception{
Object o = null;
try {
o = c.newInstance(); //创建对象
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Field[] fields = c.getDeclaredFields(); //获得所有属性字段
ArrayList<String> list = new ArrayList<String>();
for(Field f : fields){
list.add(f.getName());
f.setAccessible(true);
}
int i = 0;
for(String str : list){
if(map.get(str) != null){
try {//暂时没有找到直接获取Fields直接获取属性类型的方法
fields[i].set(o, fun(fun1(fields[i].getType().toString()), map.get(str)));
//给它创建一个对象,可能对象里面的数据是空,也很有可能抛出异常
i++;
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return o;
}
private static Object fun(Class c , String str)throws Exception{
Constructor constructor = c.getConstructor(str.getClass());
Object obj = constructor.newInstance(str);
return obj;
}
private static Class fun1(String str){
String strTmp = str.substring(6, str.length()); //如果对6有疑惑,直接输出str就会好了
try {
return Class.forName(strTmp);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
程序结果:
小陈 man 10
当然这程序也有一定的问题就是没有测试,基本类型.应该基本类型是会出现问题的,这个程序不考虑性能,应该能应对大部分情况.由于刚开始工作时间不够充裕(懒的接口),异常还有命名并不够规范.如果不正确或者疑惑您都可以联系我,一起交流学习chenguoqide@qq.com