我们知道,反射是Java的灵魂,笔者最近做一个javase的小项目时,需要用到java反射的知识,所以封装了一套小的工具类,目的是实现javabean到map的自由转化;
好了,废话不多说,我们直接上代码吧….
**
工具类代码:
**
package utils;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class BeanInfoUtils <T>{
/***
* 由bean转化成map
* @param t
* @return
*/
public Map<String, Object> beanTransformToMap(T t){
Map<String, Object> result = new HashMap<String,Object>();
PropertyDescriptor[] pds = getProperties(t);
for(PropertyDescriptor pd : pds){
String key = pd.getName();
if(!key.equals("class")){
Method getter = pd.getReadMethod();
try {
Object value = getter.invoke(t);
result.put(key, value);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
return result;
}
/***
* 由map转化成bean
* @param map
* @param t
* @return
*/
public T mapTransformToBean(Map<String, Object> map,T t){
PropertyDescriptor[] pds = getProperties(t);
for(PropertyDescriptor pd : pds){
String key = pd.getName();
if(map.containsKey(key)){
Object value = map.get(key);
Method setter = pd.getWriteMethod();
try {
setter.invoke(t, value);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
return t;
}
/***
* 得到对象的属性数组
* @param t
* @return
*/
public PropertyDescriptor[] getProperties(T t){
BeanInfo bi = null;
try {
bi = Introspector.getBeanInfo(t.getClass());
} catch (IntrospectionException e) {
e.printStackTrace();
}
if(bi == null ) return null;
else return bi.getPropertyDescriptors();
}
}
**
bean代码:
**
package pojo;
import java.util.Date;
import utils.IDUtils;
/***
* 用户
* @author Elliot
*
*/
public class User {
private String id;//用户id 使用时间生成策略
private String username;//用户名
private String nickname;//昵称
private String password;//密码
private Double balance;//余额
private String createTime;//用户创建时间
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getBalance() {
return balance;
}
public void setBalance(Double balance) {
this.balance = balance;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public User() {
super();
}
public User(String username, String nickname, String password) {
super();
this.id = System.currentTimeMillis() + "";
this.username = username;
this.nickname = nickname;
this.password = password;
this.balance = 0.0;
this.createTime = new Date().toString();
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", nickname=" + nickname + ", password=" + password
+ ", balance=" + balance + ", createTime=" + createTime + "]";
}
}
**
测试:
**
public static void main(String[] args) {
User u = new User("LuciferMS", "Elliot", "123456");
BeanInfoUtils<User> biu = new BeanInfoUtils<User>();
Map<String, Object> map = biu.beanTransformToMap(u);
for(Entry<String, Object> e : map.entrySet()){
System.out.println(e.getKey() + " : " + e.getValue());
}
System.out.println("\n---------美丽的分割线------\n");
u = biu.mapTransformToBean(map, new User());
System.out.println(u);
}
**
效果:
**
本文介绍了一个用于Java Bean和Map相互转换的工具类实现。通过Java反射机制,该工具类能够轻松地将Java Bean实例转化为Map对象,或将Map对象转换为Java Bean实例。
1860

被折叠的 条评论
为什么被折叠?



