出处: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 +="\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(实体)类的所有字段值的更多相关文章

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

    说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什 ...

  2. java中通过反射获取方法并且调用(getMethod和invoke深入)实践

    为了支持业务的快速变更,往往采用可配置的方式,将业务逻辑的处理部分配置在数据库中或者XMl文件里.配置什么,如何配置才更灵活,That's a problem. 以数据库配置为例(xml相同),在数据 ...

  3. java中抽象类是否可以继承实体类?

    一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类, ...

  4. 反射获取config实体类属性并赋值

    /// <summary> /// 将实体类存入config /// </summary> /// <param name="enity">&l ...

  5. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

  6. Android利用反射机制为实体类属性赋值

    在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面 ...

  7. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  8. 利用Java反射机制对实体类的常用操作工具类ObjectUtil

    代码: ObjectUtil类: import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.Simpl ...

  9. Java中的反射和注解

    前言 在Java中,反射机制和注解机制一直是一个很重要的概念,那么他们其中的原理是怎么样呢,我们不仅仅需要会使用,更要知其然而之所以然. 目录 反射机制 反射如何使用 注解定义 注解机制原理 注解如何 ...

随机推荐

  1. 「Codeforces 724F」Uniformly Branched Trees

    题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...

  2. Scalable Rule-Based Representation Learning for Interpretable Classification

    目录 概 主要内容 Wang Z., Zhang W., Liu N. and Wang J. Scalable rule-based representation learning for inte ...

  3. Adaptive gradient descent without descent

    目录 概 主要内容 算法1 AdGD 定理1 ADGD-L 算法2 定理2 算法3 ADGD-accel 算法4 Adaptive SGD 定理4 代码 Malitsky Y, Mishchenko ...

  4. 编写Java程序,以树形结构显示国家-直辖市/省/州信息

    返回本章节 返回作业目录 需求说明: 以树形结构显示国家-直辖市/省/州信息 实现思路: 创建显示树形结构的类Tree,在该类中定义Map类型的全局实例属性countryMap,该Map集合用于存放所 ...

  5. 使用 Eclipse 可视化插件 windowbuilder 进行Java GUI开发(插件安装的两种方法)

    对于Java GUI开发 其实最方便的方法是用插件制作,当然先了解完代码原理是最好的. eclispe安装windowbuilder有两种方式,一种是离线安装,一种是在线安装. 一.第一种在线安装: ...

  6. [特别篇] 记JZ冬令营(Finished)

    1.16 走错班了, 去了全是大佬的1班, 然后灰溜溜滚回2班了. 去参加开营仪式. 然而昏昏欲睡... 实在太累了澡也没洗.. 群英云集, 多是感慨. 当时依依惜别和铮铮誓言, 在重逢中无语凝噎. ...

  7. Docker_安装和卸载(2)

    1.检查是否安装docker docker -v 下图为已安装docker的结果 下图为未安装docker的结果 2.卸载docker 查看已安装的版本 yum list installed | gr ...

  8. spring cloud Zuul 多层拦截 --- 心得

    1.前言 根据教材.博客文章的实例实操,基本都是单层拦截,没有找到多层拦截的具体写法 ,让我走了很多弯路,我将其写在这里,以待以后参考. 2.环境 spring boot : 2.1.6.RELEAS ...

  9. 使用 arguments 对象

    arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法. //函数没有定义形参,但是在函数体内通过 a ...

  10. WebGL 与 WebGPU 比对[1] 前奏

    目录 1 为什么是 WebGPU 而不是 WebGL 3.0 显卡驱动 图形 API 的简单年表 WebGL 能运行在各个浏览器的原因 WebGPU 的名称由来 2 与 WebGL 比较编码风格 Op ...