文档章节

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

白志华
 白志华
发布于 2015/10/18 10:56
字数 614
阅读 9
收藏 0

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


       今天跟大家分享的是通过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( ));
	}

       效果图如下:

 

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

       

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaoxian8023/article/details/24109185

共有 人打赏支持
白志华
粉丝 31
博文 265
码字总数 57524
作品 0
长沙
程序员
私信 提问
Java基础之反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...

Java-老刘
05/15
0
0
编程思想 之「运行时类型识别、反射」

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/79576706 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
03/16
0
0
一篇偏激的项目总结和PPT——数据驱动型的网站开发的几个问题和讨论。

所谓数据驱动型的网站,其实就是常见的MIS系统在B/S形式下的实现。B/S模式在90年年代末大量出现的时候,其主要特征是Page-Based,也就是基于页面的。因为Html技术的网站本身是一张一张的页面...

Brin想写程序
2014/04/18
0
2
解惑Java注解类型(待更新)

java注解是在JDK5时引入的新特性,鉴于目前大部分框架(如Spring)都使用了注解简化代码并提高编码的效率,因此掌握并深入理解注解对于一个Java工程师是来说是很有必要的事。本篇我们将通过以下...

芥末无疆sss
10/09
0
0
Hibernate反射DAO模式

在持久层框架中,如果我们要像简单的JDBC连接数据库那样写一个通用的Dao方法的话,那么把JDBC简单的业务逻辑搬到hibernate持久层框架中,当然是不可能的,这里主要的问题就在于hibernate持久...

zretc
2013/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 教程:在 Confluence 中导航

当你对 Confluence 有所了解后,你会发现 Confluence 使用起来非常简单。这个教程主要是针对你使用的 Confluence 界面进行一些说明,同时向你展示在那里可以进行一些通用的任务和操作。 空间...

honeymose
今天
2
0
sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部