1. 程式人生 > >Java基礎-將Bean屬性值放入Map中

Java基礎-將Bean屬性值放入Map中

       利用發射將Java物件的屬性值以屬性名稱為鍵,儲存到Map中的簡單實現。包括自身屬性及從父類繼承得到的屬性。Java型別的getField[s]方法只能獲取public 型別的屬性,getDeclaredFields則能獲取所有宣告的屬性,同時,如果類的可見性非公有,則Field的get(Object)方法將取不到具體的屬性值。

package com.wood.util;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/** 
*   
* @ClassName: BeanToMapUtils 
* @Description: TODO
* @author   wood
* @date 	2014-10-31 下午09:52:41 
*
 */
public class BeanToMapUtils {
	/**
	 * getFileds獲取所有public 屬性<br/>
	 * getDeclaredFields 獲取所有宣告的屬性<br/>
	 * @param bean
	 * @return 將某個類及其繼承屬性全部新增到Map中
	 */
	public static Map<String,Object> beanToMap(Object bean){
		Map<String,Object> result = new HashMap<String,Object>();
		if(bean==null){
			return result;
		}
		
		Field[] fields = bean.getClass().getDeclaredFields();
		if(fields==null||fields.length==0){
			return result;
		}
		
		for(Field field:fields){
			//重置屬性可見(而且一般屬性都是私有的),否則操作無效
			boolean accessible = field.isAccessible();
			if(!accessible){
				field.setAccessible(true);
			}
			
			//獲取屬性名稱及值存入Map
			String key = field.getName();
			try {
				result.put(key, field.get(bean));
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			
			//還原屬性標識
			field.setAccessible(accessible);
		}
		
		//獲取父類屬性
		fields = bean.getClass().getSuperclass().getDeclaredFields();
		if(fields==null||fields.length==0){
			return result;
		}
		
		for(Field field:fields){
			//重置屬性可見(而且一般屬性都是私有的),否則操作無效
			boolean accessible = field.isAccessible();
			if(!accessible){
				field.setAccessible(true);
			}
			
			//獲取屬性名稱及值存入Map
			String key = field.getName();
			try {
				result.put(key, field.get(bean));
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			
			//還原屬性標識
			field.setAccessible(accessible);
		}
		
		return result;
	}
	
	public static void main(String[] args) {
		Dog info = new Dog();
		info.setCountry("cc");
		info.setName("Dog");
		
		info.setCategory("gram");
		info.setOwner("wang");
		
		System.out.println(beanToMap(info));
	}
}

相關推薦

Java基礎-Bean屬性Map

       利用發射將Java物件的屬性值以屬性名稱為鍵,儲存到Map中的簡單實現。包括自身屬性及從父類繼承得到的屬性。Java型別的getField[s]方法只能獲取public 型別的屬性,getDeclaredFields則能獲取所有宣告的屬性,同時,如果類的可見性

遍歷list集合按照其中一個屬性分類Map

for (AppServerInfo appServerInfo : serverInfoList) { String envIp = appServerInfo.getEnvIp(); if (serverMap.keySet().contains(envIp)) {

hibernate使用setResultTransformer()SQL查詢結果集合

-h cal 們的 gpo ict dds eas find ans 在平時開發中Hibernate提供的hql基本能夠滿足我們的日常需求。但是在有些特殊的情況下,還是需要使用原生的sql,並且希望sql查詢出來的結果能夠綁定到pojo上。hibernate API中的cr

多行資料陣列

DataTable dt = new DataTable(); OleDbDataReader reader=null; stri

利用 BeanUtils MapBean 進行相互轉換(把 map Bean屬性

map -》 Bean BeanUtils.populate(Object bean, Map<String, ? extends Object> properties); B

java通過檔案路徑讀取該路徑下的所有檔案並list

需求:所有xml檔案都放在某個目錄下,寫個方法讀取所有xml檔案,然後傳給下面的某個方法呼叫 實現:先把所有的xml檔案通過遞迴讀取出來 ,存放到List中,然後以檔名為Key,檔案(檔案路徑+檔名)為Value,存放到Map中,供後面程式呼叫 程式碼如下: import java.io.File

JavaExcel數據導到數據庫

port .get top logs bsp 連接 sta desktop 一個 所用Jar包 1. sqljdbc4.jar 連接數據庫的Jar包(根據數據庫的不同進行選擇,我用的SqlServer2008) 2.Jxl.jar 訪問Excel的Jar包 package

Mybatis結果map時別名不是駝峰形式

map 形式 bat dst 查詢 key sta code ati 查詢時如果給字段起別名,並且將查詢結果映射到一個Map,那麽Map的key將是忽略大小寫的。映射到一個實體類是沒這個問題的。 state as addState 從Map中取值時應該:map.get("a

time的結果到文件

寫入 time 內容 方式 記錄 準備 標準輸出 .sh 通過 緣起 今天看到一個問題,如何把time的執行結果放到文件中,心想直接time sh sleep.sh >output.log不就可以了麽。其實大部分返回標準輸出的命令都可以這麽幹,列如:ls >ou

AnaularJs的一鍵全選和全不選,且選中的資料到陣列

1.Js程式碼 //全選和全不全 $scope.box1 = function() { var aa = $scope.checkAll; if(aa == false) { for(var i = 0; i < $scop

從控制檯輸入若干個單詞(輸入回車結束)集合這些單詞排序後(忽略大小寫)打印出來。 [選做題]

import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Scanner; public cl

java物件複製和屬性複製工具類

兩個不同型別的物件中有欄位名稱不區分大小寫的情況下一樣,欄位含義一樣,需要組裝到另一個物件中去,然後就寫了一個這種工具類 我的型別比較特殊,老系統和新系統的物件命名大小寫命名不一致,並且欄位相同型別也有不一致的情況,所以自己寫了一個, 不是很完美基本能用。

java通過註解解決屬性更換 例如1000轉換為10 除以100的操作

package com.mryt.cps.oms.center.util.serializer; import com.fasterxml.jackson.core.JsonGenerator; im

隨機10個100到200之間的整數,這些數陣列,列印陣列,再使用 3種排序。

package com.paixu; public class Test_maopao { /** * @param args */ public static void main(String[] args) { // TODO Auto-generat

java基礎語法之賦運算子

賦值運算子以符號“=”表示,它是一個二元運算子(對兩個數運算元作處理),其功能是將右方運算元所含有的值賦給左方的運算元。左方地運算元必須是一個變數,而右邊的運算元則可以是任何表示式 其擴充套件的賦值運算子:+=,-=,*=,/=,%=      

tomcat啟動時快取Redis

package com.tmhc.sms.cache; import java.util.List; import java.util.Map; import java.util.Set; imp

攜程 Apollo 配置中心 | 學習筆記(十三)| 如何日誌配置檔案到Apollo配置中心並支援熱更新?

本章將介紹如何將日誌配置檔案放入到Apollo配置中心並支援熱更新專欄目錄:歡迎關注個人公眾號:  Coder程式設計歡迎關注個人網站:www.52melrin.com需求     日誌模組是每個專案中必須的,用來記錄程式執行中的相關資訊。一般在開發環境下使用DEBUG級別的

所有屬性新增到Map

public class FunSwitch{ public int clientFile=0; public String fileMonitor="wangzhiming"

的方法數總結(球盒模型問題)

本篇部落格主要講解球盒模型問題中所有情況,因為該問題是組合數學中的最常見的一類問題,所以有必要在這裡詳細地說一說。 該類問題涉及到三個因素,分別是球、盒子、盒子是否可以為空。所以大概可以將該問題分為以下八種情況: 1.將r個無區別的球放入n個有標誌的