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


    出处:https://developer.aliyun.com/article/239346 

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

    今天跟大家分享的是通过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 +="
    <" +getString( o , c.getSuperclass( ) )+">,
    ";
            }
    
            // 获取类中的所有定义字段
            Field[ ] fields = c.getDeclaredFields( );
    
            // 循环遍历字段,获取字段对应的属性值
            for ( Field field : fields )
            {
                // 如果不为空,设置可见性,然后返回
                field.setAccessible( true );
    
                try
                {
                    // 设置字段可见,即可用get方法获取属性值。
                    result += field.getName( ) + "=" + field.get( o ) +",
    ";
                }
                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( ));
        }

           效果图如下:

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

  • 相关阅读:
    JDBC批处理
    SQL注入攻击及其解决方法
    JDBC配置文件的开发形式
    JDBCUtils工具类
    利用JDBC技术,模拟用户登录的过程。查询用户表,用户名和密码是否匹配,是否存在。
    JDBC进行数据库的--增--删--改--案例----纯代码
    JDBC遍历结果集---ResultSet
    软件测试(十三)
    软件测试(十二)
    软件测试(十一)
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/14280188.html
Copyright © 2020-2023  润新知