轉載自?https://blog.csdn.net/u013905744/article/details/73167861
需求:
有一個Map對象
[java]?view plaincopy
Map<String,Object>?map?=?new?HashMap<>();??map.put("name",?"bellychang");??map.put("likes",?new?String[]{"football",?"basketball"});??
希望實現一個通用方法,將其轉換為如下的JavaBean
[java]?view plaincopy
public?class?SimpleBean?{????????private?String?name;??????private?String[]?likes;????????public?SimpleBean()?{??????}????????public?SimpleBean(String?name,?String[]?likes){??????????this.name?=?name;??????????this.likes?=?likes;??????}????????public?String?getName()?{??????????return?name;??????}????????public?void?setName(String?name)?{??????????this.name?=?name;??????}????????public?String[]?getLikes()?{??????????return?likes;??????}????????public?void?setLikes(String[]?likes)?{??????????this.likes?=?likes;??????}????????@Override??????public?String?toString()?{??????????return?"SimpleBean{"?+??????????????????"name='"?+?name?+?'\''?+??????????????????",?likes="?+?Arrays.toString(likes)?+??????????????????'}';??????}??}??
工具類
[java]?view plaincopy
public?static?<T>?T?convertMap(Class<T>?type,?Map?map)?throws?IntrospectionException,?IllegalAccessException,??????????InstantiationException,?InvocationTargetException?{??????BeanInfo?beanInfo?=?null;???????T?obj?=?null;??????beanInfo?=?Introspector.getBeanInfo(type);????????????obj?=?type.newInstance();??????????????????????PropertyDescriptor[]?propertyDescriptors?=?beanInfo.getPropertyDescriptors();??????????????for?(int?i?=?0;?i?<?propertyDescriptors.length;?i++)?{??????????PropertyDescriptor?descriptor?=?propertyDescriptors[i];??????????String?propertyName?=?descriptor.getName();??????????if?(map.containsKey(propertyName))?{????????????????????????????Object?value?=?map.get(propertyName);????????????????Object[]?args?=?new?Object[1];????????????????????????????if?(descriptor.getPropertyType()?==?Long.class)?{??????????????????args[0]?=?Long.parseLong(value.toString());??????????????}?else?if?(descriptor.getPropertyType()?==?Integer.class)?{??????????????????args[0]?=?Integer.valueOf(value.toString());??????????????}?else?{??????????????????args[0]?=?value;??????????????}??????????????????????????????descriptor.getWriteMethod().invoke(obj,?args);??????????}??????}??????return?obj;??}??
測試類
[java]?view plaincopy
@Test??public?void?testConvertMap()?throws?Exception?{????????????Map<String,Object>?map?=?new?HashMap<>();??????map.put("name",?"changliang");??????map.put("likes",?new?String[]{"football",?"basketball"});??????SimpleBean?simpleBean?=?BeanToMapUtil.convertMap(SimpleBean.class,?map);??????System.out.println(simpleBean);??}??
注意事項:
1. Map的key與JavaBean的key一致
2. JavaBean中要有空的構造函數,以及get,set方法
參考:java 中的內省機制
總結
以上是生活随笔為你收集整理的使用Introspector(Java内省机制)实现Map转换为JavaBean的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。