您的位置:首页 > 编程语言 > Java开发

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

2016-01-12 21:31 806 查看
说起反射,不得不说它实在是太强大了,通过反射就可以轻轻松松拿到各种东东,如果你想在项目中解除对某个类的依赖,可以考虑用反射。 今天跟大家分享的是通过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 tq
 * @version 创建时间:2015年12月16日 下午5:03:08
 */ 
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( ));  
}

效果图如下:




这样格式统一了,同时避免了由于代码改动太多而导致出错率上升,最重要的是可以节省大量的时间。以最小的代价完成修改功能,这是很有必要的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: