java Map轉(zhuǎn)Object與Object轉(zhuǎn)Map實(shí)現(xiàn)代碼
java Map轉(zhuǎn)Object與 Object轉(zhuǎn)Map
1、定義一個(gè)實(shí)體類:
package reflect; public class User { private String name; private int age; 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; } }
2、Map轉(zhuǎn)Object轉(zhuǎn)換如下:
package reflect; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; public class testMapToObject { public static void main(String[] args){ //假設(shè)有一個(gè)Map存放了一個(gè)對(duì)象的姓名和年齡 Map<string,object> map = new HashMap<string,object>(); map.put("name", "Kobi"); map.put("age", 39); User user = transferMapToUser(map,User.class); System.out.println(user.getName()); System.out.println(user.getAge()); } public static <t> T transferMapToUser(Map<string,object> map,Class<t> classT){ try { return transfer(map,classT.newInstance()); } catch (InstantiationException ex) { System.out.println("what the fuck?"); } catch (IllegalAccessException ex) { System.out.println("what the fuck?"); } return null; } public static <t> T transfer(Map<string,object> map,Object obj){ try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); if (map.containsKey(key)) { Object value = map.get(key); // 得到property對(duì)應(yīng)的setter方法 Method setter = property.getWriteMethod(); try { setter.invoke(obj, value); } catch (IllegalArgumentException ex) { System.out.println("what the fuck?"); } } } } catch (Exception ex) { System.out.println("what the fuck?"); } return (T) obj; } }
運(yùn)行結(jié)果:
run: Kobi 39 成功構(gòu)建 (總時(shí)間: 0 秒)
3、Object轉(zhuǎn)Map:
package reflect; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.Map; import java.util.TreeMap; public class testObjectToMap { public static void main(String[] args){ User user = new User(); user.setName("Kobi"); user.setAge(39); Map<string, object=""> map = transBean2Map(user); System.out.println(map); } public static Map<string, object=""> transBean2Map(Object obj) { if (obj == null) { return null; } TreeMap<string, object=""> map = new TreeMap<>(); try { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor property : propertyDescriptors) { String key = property.getName(); // 過濾class屬性 if (key.equals("class")) { continue; } // 得到property對(duì)應(yīng)的getter方法 Method getter = property.getReadMethod(); Object value = getter.invoke(obj); map.put(key, value); } } catch (Exception e) { System.out.println("transBean2Map Error " + e); } return map; } }
運(yùn)行結(jié)果:
run: {age=39, name=Kobi} 成功構(gòu)建 (總時(shí)間: 0 秒)
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
IDEA配置Tomcat后,控制臺(tái)tomcat?catalina?log出現(xiàn)亂碼問題
本文介紹了如何通過設(shè)置Tomcat和IDEA的編碼格式來解決編碼問題,首先嘗試修改Tomcat的logging.properties文件中的編碼設(shè)置,如果未解決問題,則調(diào)整IDEA的編碼設(shè)置,通過修改vmoptions文件來全局設(shè)置IDEA的編碼格式,作者分享了個(gè)人成功解決問題的方法和步驟,供其他開發(fā)者參考2024-09-09解決RestTemplate 請(qǐng)求url中包含百分號(hào) 會(huì)被轉(zhuǎn)義成25的問題
這篇文章主要介紹了解決RestTemplate 請(qǐng)求url中包含百分號(hào) 會(huì)被轉(zhuǎn)義成25的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-10-10Nacos1.4.0 Windows10單機(jī)模式啟動(dòng)和集群?jiǎn)?dòng)過程解析
這篇文章主要介紹了Nacos1.4.0 Windows10單機(jī)模式啟動(dòng)和集群?jiǎn)?dòng),第一次使用nacos,廢話不多說,記錄下自己?jiǎn)?dòng)Nacos遇到的坑,感興趣的朋友跟隨小編一起看看吧2023-10-10簡(jiǎn)單聊一聊Java線程池ThreadPoolExecutor
在使用線程池之后,開啟線程就變成了在線程池當(dāng)中找到一個(gè)空閑的線程,銷毀線程變成了歸還線程到線程池的過程,下面這篇文章主要給大家介紹了關(guān)于Java線程池ThreadPoolExecutor的相關(guān)資料,需要的朋友可以參考下2022-06-06SpringBoot中實(shí)現(xiàn)訂單30分鐘自動(dòng)取消的項(xiàng)目實(shí)踐
現(xiàn)在電子商務(wù)平臺(tái)上訂單創(chuàng)建成功,等待支付,一般會(huì)給30分鐘的時(shí)間,本文主要介紹了SpringBoot中實(shí)現(xiàn)訂單30分鐘自動(dòng)取消的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10