说明
在开发中,会有这种需求,将javabean转map,具体含义:
- 将 javabean 对象中的属性(有 getter 方法)作为map中的key
- 将 javabean 对象中的属性值 作为 map中的value
java代码
javabean
class Person{
private String name;
private int age;
private float length;
private boolean banzhang;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getLength() {
return length;
}
public void setLength(float length) {
this.length = length;
}
public boolean isBanzhang() {
return banzhang;
}
public void setBanzhang(boolean banzhang) {
this.banzhang = banzhang;
}
}
Bean2Map类
public class Bean2Map {
public static Map bean2map(Object obj) throws IllegalAccessException, InvocationTargetException {
Map retMap=new HashMap();
//获取所有的类的属性对象
Field[] fields=obj.getClass().getDeclaredFields();
//获取所有public方法对象
Method[] methods=obj.getClass().getMethods();
for(Field field:fields){
//根据所有的类的属性对象,拼装 get方法 和 is方法
String name=field.getName();
String getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1,name.length());
String isMethodName="is"+name.substring(0,1).toUpperCase()+name.substring(1,name.length());
//判断所有public方法中,是否有 属性的get方法 和 is方法,如果有就调用
for(Method method:methods){
String methodName=method.getName();
if(methodName.equals(getMethodName) || methodName.equals(isMethodName)){
//调用方法
Object ret=method.invoke(obj);
retMap.put(name, ret);
}
}
}
return retMap;
}
}
测试启动类
public class Main {
public static void main(String[] args) {
Person person=new Person();
person.setName("李雷");
person.setAge(20);
person.setBanzhang(true);
person.setLength(1.82f);
Map map=null;
try {
map=Bean2Map.bean2map(person);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println();
}
}