反射 父类

现有每多个javabean,但是每个bean中都有不同的属性,并且都是通过get和set方法来修改和获取值。如果调试一步一步去猜内部结构,想用一个方法可以获取不同对像中各个属性的值,怎么办呢?可以利用JAVA的反射机制。

1.此为小引

//运用反射机制遍历单个对像中每个属性值
public static void Reflect_Object(Object o,String classPath){
try {
Class userClass = Class.forName(classPath);//加载类
Method[] methods = userClass.getDeclaredMethods();//获得类的方法集合
//遍历方法集合
for(int i =0 ;i

2.若遍历的bean有父类,则方法1则取不到父类中各个属性的值,故本类为扩充,不仅可以取到bean中每个属性的值,连父类的属性值也可以一并获得。

@SuppressWarnings(“unchecked”)
public static void Reflect_Object(Object o,String classPath){
try {
Class _class = Class.forName(classPath);// 加载类
// Method[] methods = _class.getDeclaredMethods();// 获得类的方法集合
recursive(o,_class);
// 遍历方法集合
// for (int i = 0; i < methods.length; i++) {
// // 获取所有getXX()的返回值
// if (methods[i].getName().startsWith(“get”)) {// 方法返回方法名
// methods[i].setAccessible(true);//允许private被访问(以避免private getXX())
// Object object = methods[i].invoke(o, null);
// System.out.println(” ” + methods[i].getName() + “=” + object);
// }
// }
// 遍历父类方法集合
// if (_class.getGenericSuperclass() != null) {
// Class superClass = _class.getSuperclass();// 父类
// Method[] superMethods = superClass.getDeclaredMethods();//父类方法
// for (int j = 0; j < superMethods.length; j++) {
// // 获取所有getXX()的返回值 Method method :
// if (superMethods[j].getName().startsWith(“get”)) {// 方法返回方法名
// methods[j].setAccessible(true);//允许private被访问
// Object object = superMethods[j].invoke(o, null);
// System.out.println(” ” + superMethods[j].getName()+ “=” + object);
// }
// }
// Field[] fields = superClass.getDeclaredFields();//父类变量
// for(Field field : fields) {
// System.out.println(field);
// }
// }
System.out.println(“====”);
} catch (Exception e) {
e.printStackTrace();
}
}

//递归遍历类及父类的属性值
@SuppressWarnings(“unchecked”)
public static Class recursive(Object o,Class _class){
if(_class==null)
return null;
else{
Method[] methods = _class.getDeclaredMethods();// 获得类的方法集合
// 遍历方法集合
for (int i = 0; i < methods.length; i++) {
// 获取所有getXX()的返回值
if (methods[i].getName().startsWith(“get”)) {// 方法返回方法名
methods[i].setAccessible(true);//允许private被访问(以避免private getXX())
Object object;
try {
object = methods[i].invoke(o, null);
System.out.println(” ” + methods[i].getName() + “=” + object);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(“====”+_class.getName());
return recursive(o,_class.getSuperclass());
}
}

Original: https://www.cnblogs.com/sode/p/3229186.html
Author: 镇水古月
Title: 反射 父类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544059/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【踩坑日记】记一次静态导入引起Lombok失效,导致编译失败的惨案

    时间: 某个普通的周一 天气: 晴,万里无云 内容: 开开心心写完需求,提交代码,打包部署。 [INFO] ————————————…

    Java 2023年6月5日
    097
  • java- 接口笔记

    接口 interface 接口就是一组规范(就像我们法律一样),所有实现类都要遵守。 面向对象的精髓,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(…

    Java 2023年6月15日
    0106
  • 微服务SpringCloud之配置中心和消息总线

    在微服务SpringCloud之Spring Cloud Config配置中心SVN博客中每个client刷新配置信息时需要post请求/actuator/refresh,但客户端…

    Java 2023年5月30日
    0100
  • Python复制Excel表格图片

    import osimport timeimport pyautoguiimport win32com.client as win32# 发送函数def fz(app,bk): x…

    Java 2023年6月16日
    084
  • Dubbo + ZooKeeper

    16 Dubbo + ZooKeeper 16.1 Dubbo下载 GigHub下载地址: https://github.com/apache/dubbo-admin/tree/m…

    Java 2023年6月5日
    084
  • java中的内部类(1、局部内部类 2、匿名内部类 3、成员内部类 4、静态内部类)

    局部内部类 局部内部类定义在局部位置比如(方法内),就内部类有类名 可以直接访问外部类的所有成员,包括私有的 不能添加访问修饰符,因为他的位置就是一个局部变量。局部变量是不能用访问…

    Java 2023年6月6日
    097
  • 保姆教程系列二、Nacos实现注册中心

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 上篇我们介绍到 保姆教程系列一、Linux搭建Nacos 注册中心原理 一、环境准备 Java版本:1.8+ (L…

    Java 2023年6月5日
    0106
  • centos 7下ifcfg-ens33网卡配置文件详解

    [root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" …

    Java 2023年5月29日
    0114
  • 内部类(Java)

    基本介绍 概念:在一个类的内部再定义一个完整类 特点:编译之后可生成独立的字节码文件;内部类可以直接访问外部类的私有属性,不破坏封装性 分类:成员内部类;静态内部类;局部内部类;匿…

    Java 2023年6月9日
    095
  • Nginx 与 Tomcat : 413 Request Entity Too Large(请求实体太大)

    近开发时遇到了上传失败的情况 , 看日志居然显示post请求实体过大. 然后查了查资料 , 修改代理服务器Nginx 和 服务器Tomcat的相关配置 ****1.Nginx 作为…

    Java 2023年5月30日
    073
  • Java 基础常见知识点&面试题总结(下),2022 最新版!

    你好,我是 Guide。秋招即将到来,我对 JavaGuide 的内容进行了重构完善,同步一下最新更新,希望能够帮助你。 前两篇: Java 基础常见知识点&面试题总结(上…

    Java 2023年6月9日
    088
  • MySql主要性能指标说明

    在项目当中数据库一般都会成为主要的性能与负载瓶颈,那么针对数据库各项性能指标的监控与对应的优化是开发与运维人员需要面对的主要工作,而且这部分的工作会贯穿项目从开发到运行的整个周期里…

    Java 2023年6月9日
    072
  • Java中实现多线程的方式

    通过继承Thread类,并重写run方法 public class MyThread extends Thread{ public static void main(String[…

    Java 2023年6月8日
    064
  • IDEA中导入Maven模块

    IDEA中导入Maven模块 1.一个模块一个模块添加,添加pom文件 2.批量添加模块:批量添加pom文件 posted on2022-08-25 21:23 scrutiny-…

    Java 2023年6月15日
    092
  • java SPI思想

    为什么说java spi破坏双亲委派模型? – 大宽宽的回答 – 知乎 Original: https://www.cnblogs.com/myseries…

    Java 2023年5月29日
    076
  • 系统性掌握SpringBoot

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/franson-2016/p/13320880.html…

    Java 2023年5月30日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球