java中使用反射獲取pojo(實體)類的全部字段值


       說起反射。不得不說它實在是太強大了,通過反射就能夠輕輕松松拿到各種東東,假設你想在項目中解除對某個類的依賴,能夠考慮用反射。


       今天跟大家分享的是通過java中的反射,獲取pojo類的全部字段值。


       為什么要做這個操作的呢?主要是為了重寫實體類的toString方法。有人會說。直接重寫toString方法。返回字段.toString()的字符串不就可以了。

這么做的確能夠。可是假設你的pojo類有上百個,上千個,你還要一個一個改嗎?所以我們須要從新的方向去解決。


       由於我們全部的pojo類。都繼承一個IdEntity的pojo類。

它僅僅有一個id屬性,所以假設我在IdEntity中重寫了toString方法,那么其它全部繼承與IdEntity的pojo類都不用再寫了。並且也保證了格式的統一。這里要反射出pojo類的全部字段值,假設字段是其它pojo類的對象時,也要拿過來把全部屬性都列出來。

package entity.qx;

import java.lang.reflect.Field;

/**
 * @author : 崔成龍
 * @group : tgb8
 * @Date : 2014-4-9 下午8:37:22
 * @Comments : 用於重寫實體類的toString方法
 * @Version : 1.0.0
 */
public class EntityToString
{

	/**
	 * @MethodName : getString
	 * @Description : 獲取類中全部屬性及屬性值
	 * @param o
	 *            操作對象
	 * @param c
	 *            操作類。用於獲取類中的方法
	 * @return
	 */
	public static String getString(Object o, Class< ? > c )
	{
		String result = c.getSimpleName( ) + ":";

		// 獲取父類。推斷是否為實體類
		if ( c.getSuperclass( ).getName( ).indexOf( "entity" ) >= 0 )
		{
			result +="\n<" +getString( o , c.getSuperclass( ) )+">,\n";
		}

		// 獲取類中的全部定義字段
		Field[ ] fields = c.getDeclaredFields( );

		// 循環遍歷字段,獲取字段相應的屬性值
		for ( Field field : fields )
		{
			// 假設不為空。設置可見性,然后返回
			field.setAccessible( true );

			try
			{
				// 設置字段可見,就可以用get方法獲取屬性值。

result += field.getName( ) + "=" + field.get( o ) +",\n"; } catch ( Exception e ) { // System.out.println("error--------"+methodName+".Reason is:"+e.getMessage()); } } if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length( )-2 ); return result; } }

       然后在IdEntity中,重寫toString方法就可以:

	@Override
	public String toString(){
		return EntityToString.getString(this,this.getClass( ));
	}

       效果圖例如以下:

 

       這樣格式統一了,同一時候避免了由於代碼修改太多而導致出錯率上升。最重要的是能夠節省大量的時間。以最小的代價完畢修改功能,這是非常有必要的。

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM