java Object转Map

 项目中,最近有这种需求,然后自己根据API提供的类,写了两个Object转Map的方法:

/**
	 * 使用java.beans.Introspector转换
	 * @param object
	 * @return map
	 * @throws Exception
	 */
	public static Map<String, Object> obj2Map(Object object){
		Map<String, Object> map = new HashMap<String, Object>();
		// 获取Object对象
		BeanInfo beanInfo = null;
		try {
			beanInfo = Introspector.getBeanInfo(object.getClass());
		} catch (IntrospectionException e) {
			e.printStackTrace();
		}
		// 获取Object属性描述
		PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

		for (PropertyDescriptor property : propertyDescriptors) {
			String key = property.getName(); //获取属性名
			if (key.compareToIgnoreCase("class") == 0) {
				continue;
			}
			Method getter = property.getReadMethod();
			Object value = null;
			try {
				value = getter != null ? getter.invoke(object) : null;//获取值
				map.put(key, value);
			} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
				e.printStackTrace();
			} 
		}
		return map;
	}
	

	/**
	 *  
	 * 使用java.lang.reflect进行转换 
	 * @param object
	 * @return map
	 */
    public static Map<String, Object> objToMap(Object object){
    	Map<String, Object> map = new HashMap<String, Object>();
    	try{
    		Field[] declaredFields = object.getClass().getDeclaredFields(); 
    		for (Field field : declaredFields) {    
                field.setAccessible(true);  
                try {
					map.put(field.getName(), field.get(object));
				} catch (IllegalArgumentException | IllegalAccessException e) {
					e.printStackTrace();
				}  
            } 
    	}catch(SecurityException e){
    		e.printStackTrace();
    	}
    	return map;
    }

新建一个对象测试下:

public class Test {

	private String sex;
	private String name;
	
	public Test(){
		
	}
	
	public Test(String sex,String name){
		this.sex = sex;
		this.name = name;
	}
	
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "Test [sex=" + sex + ", name=" + name + "]";
	}
	
	
}

结果截图:

173728_LaTD_563338.png

173734_BSeN_563338.png

 

 

转载于:https://my.oschina.net/zhengweishan/blog/697942

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Java对象换为Map,可以使用不同的方法。以下是两种常见的方法: 方法1:使用反射 您可以使用反射来获取Java对象的字段,并将字段的名称和值存储在Map中。首先,您需要获取Java对象的Class对象,然后使用Class对象获取字段列表。接下来,使用反射设置字段的可访问性为true,并获取字段的值。最后,将字段的名称和值添加到Map中。下面是示例代码: ```java Class<User> userClass = User.class; Object object = userClass.newInstance(); Map<String, Object> map = new HashMap<>(); Field[] declaredFields = userClass.getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(object)); } System.out.println(map); ``` 这段代码将Java对象`object`换为一个Map对象`map`。 方法2:使用BeanMap类(例如使用CGLib库) 另一种方法是使用BeanMap类,该类可以将Java对象换为Map。这个类可以使用CGLib库的BeanMap.create()方法来创建。首先,您需要使用BeanMap.create()方法创建一个BeanMap对象,并将Java对象传递给它。然后,您可以使用BeanMap对象的putAll()方法将Java对象的属性映射到Map对象中。下面是示例代码: ```java Map<String, Object> map = new HashMap<>(); BeanMap beanMap = BeanMap.create(object); map.putAll(beanMap); System.out.println(map); ``` 这段代码将Java对象`object`换为一个Map对象`map`。 请注意,这两种方法都需要导入所需的库,例如反射库和CGLib库。您可以根据您的项目需要选择适合的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java对象和Map互相换的6种方式](https://blog.csdn.net/wy971744839/article/details/130308133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值