通过反射获取类和父类的属性和属性值

2023-05-16

通过反射我们可以获取到一个类的属性和方法,但获取父类的private的属性却不可以直接获取,需要递归调用superclass来获取属性


SuperClass.java

public class SuperClass {

	private String name;
	private String age;
	private Date birthday;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

}


SubClass.java

public class SubClass extends SuperClass {
	private String sid;

	public String getSid() {
		return sid;
	}

	public void setSid(String sid) {
		this.sid = sid;
	}

}

SubSubClass.java

public class SubSubClass extends SubClass {
	private String grade;

	public String getGrade() {
		return grade;
	}

	public void setGrade(String grade) {
		this.grade = grade;
	}

}

保存属性和属性值

SensorData.java

public class SensorData {
    private String  sensorId;
    private Object sensorValue;

    public String getSensorId() {
        return sensorId;
    }

    public void setSensorId(String sensorId) {
        this.sensorId = sensorId;
    }

    public Object getSensorValue() {
        return sensorValue;
    }

    public void setSensorValue(Object sensorValue) {
        this.sensorValue = sensorValue;
    }

	@Override
	public String toString() {
		return "SensorData [sensorId=" + sensorId + ", sensorValue=" + sensorValue + "]";
	}
    
    
}

TestRe.java 测试类

public class TestRe {
	
	public static void main(String[] args) {
		SuperClass cla =new SubSubClass();
		//SuperClass cla =new SubClass();
		
		List<SensorData>  s = sensorDataList(cla);
		for(SensorData ss :s){
			System.out.println(ss);
		}
	}
	
	/**
	 * 通过反射获取各个属性名称和属性值封装成类
	 * 
	 * @param sensorDataDto
	 * @return
	 */
	public static List<SensorData> sensorDataList(Object sensorDataDto) {
		List<SensorData> sensorDatas = new ArrayList<SensorData>();
		Class<?> clazz = sensorDataDto.getClass();
		try {
			exceClass(sensorDataDto, sensorDatas, clazz);
		} catch (Exception e) {

		}
		return sensorDatas;
	}

	private static void exceClass(Object sensorDataDto, List<SensorData> sensorDatas, Class<?> clazz) throws Exception {
		if (clazz != Object.class) {
			System.out.println(clazz);
			returnclassF(sensorDataDto, sensorDatas, clazz);
			Class<?> clazzs = clazz.getSuperclass();
			exceClass(sensorDataDto, sensorDatas, clazzs);
		}
	}

	private static void returnclassF(Object sensorDataDto, List<SensorData> sensorDatas, Class<?> clazz) throws Exception {
		Field[] fields = clazz.getDeclaredFields();
		for (Field field : fields) {
			field.setAccessible(true);
			SensorData sensorData = new SensorData();
			sensorData.setSensorId(field.getName().toString());
			sensorData.setSensorValue(field.get(sensorDataDto));
			sensorDatas.add(sensorData);
		}
	}
}



  
通过
class com.ref.SubSubClass
class com.ref.SubClass
class com.ref.SuperClass
SensorData [sensorId=grade, sensorValue=null]
SensorData [sensorId=sid, sensorValue=null]
SensorData [sensorId=name, sensorValue=null]
SensorData [sensorId=age, sensorValue=null]
SensorData [sensorId=birthday, sensorValue=null]


通过多态可以获取不同类的属性和值

class com.ref.SubClass
class com.ref.SuperClass
SensorData [sensorId=sid, sensorValue=null]
SensorData [sensorId=name, sensorValue=null]
SensorData [sensorId=age, sensorValue=null]
SensorData [sensorId=birthday, sensorValue=null]


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过反射获取类和父类的属性和属性值 的相关文章

  • debian 无法使用apt-get解决办法

    刚装完debian xff0c 发现直接apt get是用不了的 xff0c 系统会提示你插入DVD xff0c 其实是源的配置问题 xff0c 只需要在apt的源里面修改下配置就可以了 打开apt源文件 sudo vi etc apt s
  • 蜗牛星际C单黑群晖加USB网卡做链路聚合

    黑群晖挂载USB网卡 一不小心入了群晖的坑 xff0c 然后就是不停的折腾 xff0c 入手一个蜗牛星际C单 xff0c 装好DS918 43 后 xff0c 家里有ASUS RT AC5300 xff0c 就想着搞个链路聚合 首先当然是去
  • CentOS 7 安装zoneminder

    这里写自定义目录标题 CentOS 7 安装zoneminder1 安装centos系统 xff0c 最小化安装2 配置源3 安装 zoneminder 以及环境4 关闭SELinux5 配置时区6 添加php网页支持7 安装配置数据库8
  • linux deploy linux 安装mariadb 无法启动解决办法

    这里写自定义目录标题 linux deploy linux 安装mariadb 无法启动解决办法 linux deploy linux 安装mariadb 无法启动解决办法 手头一个旧手机 xff0c 就想来折腾一番 xff0c 装到数据库
  • linux deploy 安装debian11 armhf中安装Zoneminder

    linux deploy 安装debian11 stable armhf 中安装Zoneminder 折腾了无数遍 xff0c 然后感觉也没啥用 安装linux deploy 手机获取root权限 安装debian xff08 armhf
  • OpenWRT 中创建docker Openwrt和其他宿主机中的docker容器通信

    这里写自定义目录标题 OpenWRT 中使用创建docker Openwrt和其他宿主机中的docker容器通信网络拓扑一 准备1 openwrt镜像 xff0c 2 安装pve 二 PVE配置1 网络配置2 创建docker networ
  • sublime text自定义clang format插件格式化C++代码

    本文内容为在windows平台上通过 sublime text开发自定义插件实现调用clang format对C C 43 43 代码进行格式化 需要安装LLVM xff0c 下载链接 xff1a https github com llvm
  • 四种方法实现UITableView的cell高度自动计算

    UITableview是iOS开发中使用最频繁的一个控件 xff0c 在实际开发中 xff0c 我们经常需要定制cell xff0c 让cell显示图片 文字等 由于cell包含的图片和文字是根据服务器返回的数据进行填充的 xff0c 这就
  • iOS贝塞尔曲线(UIBezierPath)的基本使用方法

    简介 UIBezierPath是对Core Graphics框架的一个封装 xff0c 使用UIBezierPath类我们可以画出圆形 xff08 弧线 xff09 或者多边形 xff08 比如 xff1a 矩形 xff09 等形状 xff
  • 手机termux免root安装kali:一步到位+图形界面

    1 工具 xff1a 安卓 xff08 包括鸿蒙 xff09 手机 WiFi 充足的电量 脑子 2 浏览器搜索termux xff0c vnc viewer xff0c 下载安装 3 对抗华为纯净模式需要一些操作 xff0c 先断网 xff
  • iOS 谓词(NSPredicate)

    文档定义 NSPredicate xff1a A definition of logical conditions used to constrain a search either for a fetch or for in memory
  • 在Ubuntu20.04中安装中文输入法

    引言 在Ubuntu系统中 xff0c 无论是写文档还是在程序中写注释 xff0c 都经常需要用到中文输入法 本文简单介绍了三种输入法框架 xff0c 然后详细介绍了在Ubuntu 20 04系统中 xff0c IBus框架和Fcitx框架
  • LED的C语言应用程序

    引言 在本文中 xff0c 用C语言编写一个LED灯的应用程序 xff0c 对文章 基于HDF的LED驱动程序开发 xff08 1 xff09 xff08 2 xff09 中开发的LED灯的驱动程序进行测试 另外 xff0c 在编写LED灯
  • CodeBlocks 快捷键篇(自己整理)

    浏览最近文件 Ctrl 43 Tab 保存当前文件 Ctrl 43 S 保存所有文件 Ctrl 43 Shift 43 S 关闭当前文件 Ctrl 43 W 关闭所有文件 Ctrl 43 Shift 43 W 跳转到上一个函数 Ctrl 4
  • send的 epoll_wait EPOLLOUT事件 与 MSG_WAITALL参数

    1 send 10G的数据 xff0c send返回值不会是10G xff0c 而是大约256k xff0c 表示你只成功写入了256k的数据 接着调用send xff0c send就会返回EAGAIN xff0c 告诉你socket的缓冲
  • Linux Crontab 设置的定时任务没有启动的排查

    1 先手动执行定时任务以此来判断脚本是否有问题 2 确认服务器是否开启定时任务计划服务 命令 xff1a service crond status service crond span class hljs operator span cl
  • 一键显示电脑IP

    1 新建文本文档 gt 将步骤2的内容存入 2 echo off ipconfig all pause exit 3 另存为 gt 扩展名为bat
  • UITextView 设置行高 并限制字数 并在键盘遮挡时向上移动

    首先添加监听 NSNotificationCenter defaultCenter addObserver self selector 64 selector textFiledEditChanged name 64 34 UITextVi
  • iOS UIAlertController

    运行环境 xff1a Xcode7 2 1 xff0c iOS Simulator9 2 语言 xff1a Objective C Swift 关于UIAlertController的使用 xff0c 主要有三种不同的方式 xff1a 1

随机推荐

  • 梯度直方图(HOG,Histogram of Gradient)

    1 介绍 HOG xff08 Histogram of Oriented Gradient xff09 是2005年CVPR会议上 xff0c 法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解决人体目标检测的图像描述子 xff
  • 为网安人士定制 | 基于Windows ICS的Kali-Weidows0.1版本制作成功并可以使用

    说明 xff1a Kali Weidows是基于ICS Windows的修改版 xff0c 一个渗透测试专用windows xff0c ICS相较于常见的Windows各版本添加了大量渗透工具 xff0c 而Kali Weidows在此基础
  • 如何把一个输入字符串转换成枚举类型

    今天学习了枚举类型 xff0c 记录如下 枚举的作用 1 xff09 限制用户不能随意赋值 xff0c 只能在定义枚举时列举的值中选择 2 xff09 无需记住每个值是什么 xff0c 只需要 选择相应的值 注意 xff1a 定义枚举时 x
  • 【论文学习】Bringing Old Photos Back to Life

    fishing pan xff1a https blog csdn net u013921430 转载请注明出处 前言 最近在浏览CVPR2020年的文章 xff0c 1000多篇真的看不完 xff0c 简单的浏览了几篇都觉得缺点意思 起初
  • frp实现内网穿透功能

    frp实现内网穿透功能 frp原理 xff1a 上面frpc ini的rdp smb字段都是自己定义的规则 xff0c 自定义端口对应时格式如下 xxx 表示一个规则名称 xff0c 自己定义 xff0c 便于查询即可 type 表示转发的
  • 【Docker】docker build与Dockerfile的实践

    基础 docker build 命令用于使用 Dockerfile 创建镜像 xff1b Dockerfile可以是本地的 也可以是在线的 自定义的 xff1b 语法 docker build OPTIONS PATH URL OPTION
  • 威联通硬盘休眠并添加开机自启动

    工具准备 xff1a 需要ssh工具和sftp工具 xff0c 常用的有PuTTY xff0c WinSCP等 我用的是MobaXterm xff0c 图它界面好看 解决思路 xff1a 1 把机械盘移出raid9和raid13 xff1b
  • ios 集成百度地图(获取定位,反向地理编码)

    新版地址 https blog csdn net u013983033 article details 109598248 原因 xff1a 之所以使用百度地图 xff0c 是因为当时使用苹果自带的定位给后台传经纬度 xff0c 后台用百度
  • 关于chrome找不到js文件的问题

    前提 jsp中采用引入的方式 lt script src 61 34 lt 61 path gt js xxx js 34 type 61 34 text javascript 34 gt lt script gt 然后通过地址静态访问是可
  • sqlserver中将sql查询结果转换成Json(互转)

    详细见 xff1a Work with JSON data SQL Server Microsoft Docs 版本支持 xff1a SqlServer2016及以后版本才支持Json 1 Json gt Table 方式一 xff1a 简
  • 树莓派无线网络配置

    原文 xff1a 树莓派连接WiFi 需科学上网 1 无线连接 这里介绍一种嵌入式业界常用的WiFi连接方法 xff0c 可完全应用于树莓派 xff0c 实现WiFi的方便 稳定连接 xff1a 同时保存多个WiFi用户名和密码可设置连接优
  • linux开启启动数字小键盘,适用于使用systemd的系统

    1 创建脚本文件 usr bin numlock span class token comment bin bash span span class token keyword for span span class token funct
  • 远程连接树莓派桌面xrdp

    本文主要介绍如何通过xrdp服务远程桌面连接树莓派 xff0c 实现树莓派的远程桌面登录 xff08 1 xff09 安装tightvncserver sudo apt get install tightvncserver 1 xff08
  • archlinux安装virtualbox

    1 安装基本包 span class token function sudo span pacman S virtualbox 选择virtualbox host modules arch模块 span class token functi
  • 因修改/etc/sudoers权限导致sudo和su不能使用问题

    现象描述及问题解决 真是闲来无事手贱 xff0c 作死的节奏 xff0c 请不要问我为什么 xff0c 我也想知道为什么 为了给一个账户添加能使用 sudo的权限 xff0c 修改了 exc sudoers文件权限 修改完之后发现所有的账户
  • Qt6.2.1编译

    我用的是ubuntu20 04 ubuntu只需要按最小需要安装 xff0c 不需要安装系统更新 先更新apt get的源 cd etc apt xff0c 将source list文件内容改为阿里云源 xff1a 添加阿里源 deb ht
  • iOS Swift 运算符错误问题

    1 在Swift中 xff0c 等号两边必须空格隔开 例如下面的代码会报错 xff1a let sum 61 1 43 2 let sum 61 1 43 2 上面报如下错误 xff1a xff1d must have consistent
  • linux下普通用户执行root权限脚本

    1 安装expect yum install y expect 2 示例 a admin切换root用户脚本 span class token shebang important usr bin expect span span class
  • pve-ceph命令行安装

    用这个安装ceph成功 xff0c 如果安装报错可以多试几次 root 64 pve01 etc apt sources list d more ceph list deb http download proxmox com debian
  • 通过反射获取类和父类的属性和属性值

    通过反射我们可以获取到一个类的属性和方法 但获取父类的private的属性却不可以直接获取 需要递归调用superclass来获取属性 SuperClass java public class SuperClass private Stri