java中使用反射获取pojo(实体)类的全部字段值

Posted wzjhoutai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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( ));
	}

       效果图例如以下:

技术分享 技术分享

       这样格式统一了,同一时候避免了由于代码修改太多而导致出错率上升。最重要的是能够节省大量的时间。以最小的代价完毕修改功能,这是非常有必要的。

       

以上是关于java中使用反射获取pojo(实体)类的全部字段值的主要内容,如果未能解决你的问题,请参考以下文章

java 反射

反射进行类的获取和相关的字段的获取

javaWeb中使用反射机制为数据库中表生成的实体类的的对象赋值?

java反射获取属性值

Java反射机制详解

Java反射机制详解