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

时间:2023-03-08 20:08:58

说起反射。不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射。

今天跟大家分享的是通过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中使用反射获取pojo(实体)类的全部字段值

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