java 所有父类字段_Java-Reflection反射-获取包括父类在内的所有字段
前言
今天Android移动端要加个新功能,所以回归Android程序员的身份.开发的过程中,发现了之前的代码写的有很多问题,真的应该把时间抽出来重构一下了.
其中有反射的一个坑,工具类某方法反射获取传入Model的属性值.但是当我把公共属性抽出来做基类的时候,发现获取不到基类的属性值了.原因是使用了getDeclaredFields();
分析
方法
功能
getFields()
获取所有public和protected字段,包括父类字段
getDeclaredFields()
获取所有字段,public和protected和private,但是不包括父类字段
写个小方法验证一下下~
写两个类,里面定义三个字段,分别用public,protected,private修饰,
一个叫ParentModel,作为父类.
一个叫model,继承ParentModel
/** * 用作父类 */
public class ParentModel {
private String p_privateField;
public String p_publicField;
protected String p_protectedField;
}
/** * 子类,继承上面定义的用作父类的ParentModel */
public class Model extends ParentModel{
private String privateField;
public String publicField;
protected String protectedField;
}
ok,分别使用getFields()和getDeclaredFields()获取model的字段,循环打印出来.
Field[] fs = Model.class.getFields();
Field[] fs1 = Model.class.getDeclaredFields();
for (Field f:fs) {
Log.d("getFields","getFields---"+f.getName());
}
for (Field f:fs1) {
Log.d("getDeclaredFields","getDeclaredFields---"+f.getName());
}
见证答案的时候到了~
getFields()的打印输出:
getDeclaredFields()的打印输出:
测试证实了我们上面的结论是对的.
但是发现里面多了一个$change,这个是什么呢?我也不知道,暂时还没查到答案,查到了回来补上.
我想获取子类和父类的所有Field
如果想用反射通过Model获取parentModel和Model的所有字段,怎么办?很明显上面的两个方法都是满足不了的.那怎么办?
不用怕,我们递归Model的父类去getDeclaredFields(),代码如下:
List fieldList = new ArrayList<>() ;
Class tempClass = Model.class;
while (tempClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
fieldList.addAll(Arrays.asList(tempClass .getDeclaredFields()));
tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
}
for (Field f : fieldList) {
Log.d("getAllFields","getFields---"+f.getName());
}
可以看到我们获取了Model和ParentModel的全部字段,不仅如此,还多出来了两个字段shadow$_klass_ 和shadow_monitor_,这个是Object中的字段.
如果你想屏蔽Object类的影响,可以为while循环再添加一个条件:
while (tmpClass !=null && !tmpClass.getName().toLowerCase().equals("java.lang.object") )
{
....
}
参考资料:
java 所有父类字段_Java-Reflection反射-获取包括父类在内的所有字段相关推荐
- Java-Reflection反射-获取包括父类在内的所有字段
前言 今天Android移动端要加个新功能,所以回归Android程序员的身份.开发的过程中,发现了之前的代码写的有很多问题,真的应该把时间抽出来重构一下了. 其中有反射的一个坑,工具类某方法反射获取 ...
- java 反射 参数名_JAVA 8 反射获取参数名
前言 在JDK8之前javac编译是不会把构造器和方法的参数名编译进class中,如果需要获取参数名,可以在方法上加上注解,反射获取注解的值从而获取参数名,比如Jackson的@JsonCreator ...
- java定义私有变量_Java Reflection(七):私有变量和私有方法
在通常的观点中从对象的外部访问私有变量以及方法是不允许的,但是Java反射机制可以做到这一点.使用这个功能并不困难,在进行单元测试时这个功能非常有效.本节会向你展示如何使用这个功能. 注意:这个功能只 ...
- java类中获取全局变量_java 通过反射获取类的全局变量、方法、构造方法
package com.str; public class ZiFuChuan { public static String ss = "全局变量!!!!!!"; String s ...
- java 反射 静态成员_java 利用反射获取内部类静态成员变量的值
待解析类结构如下: /** * @Author changle * @Time 17/6/13. * @Desc to do */ public class Goods { static class ...
- java 获得当月天数_java中 如何获取当月的天数、指定日期的月份天数详解
代码实现如下:import java.util.Calendar; public class GetDay { public static void main(String[] args) { int ...
- java string出现次数_Java String方法获取字符出现次数及字符最大相同部分示例
本文实例讲述了Java String方法获取字符出现次数及字符最大相同部分.分享给大家供大家参考,具体如下: package demo; public class Test { public stat ...
- java在文件里搜字段_Java 如何找出两个文本文件中有相同字段的行
Java有什么方便的类库做文件对比吗?比如:文件Old.txt和New.txt,第一行是列名,需要取出文件中Name字段相同的内容.部分数据如下: Old.txt New.txt Name Dep ...
- java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件
获取文件的绝对路径,读取该文件 一.文件目录打印图 下面的文件目录图,是项目中文件的位置信息:下面的例子是按照这个图来演示的. . |-- java | |-- ibard | | |-- demo1 ...
最新文章
- 0409互联网新闻 | 微信:朋友圈广告@好友评论互动能力全量开放;视频会议软件Zoom将于4月18日在纳斯达克交易所挂牌上市...
- 程序集、应用程序配置及App.config和YourSoft.exe.config .
- 前端学习(1188):事件绑定
- 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
- jquery获得指定元素坐标的方法
- 第三次IT浪潮将使白领收入成倍不均-信息革命
- oracle的aud文件,oracle asm实例的aud文件有关问题
- 简单报价单模板_圣诞节祝福邮件必这样写【附件参考模板BY埃马】
- Qt4_实现自定义模型
- 《计算机网络》学习笔记 ·003【数据链路层】
- 百度举办区块链论坛,携手多伙伴加速区块链产业落地
- Android 多种跑马灯的方法
- ActiveX控件dsoFramer的使用(word、excel、PPT)
- mysql 6.2 安装教程_linux6.2安装mysql_MySQL
- 关闭计算机 网络设备上的445端口,winXP/win7/win10系统关闭445端口的方法(电脑勒索病毒预防)...
- 手机摄影:黄埔军校旧址(下)
- [篇二章四]_安装 Windows 11 系统
- Apk脱壳圣战之---如何脱掉“梆梆加固”的保护壳
- 信息安全等级合规测评
- zeppelin高可用部署
热门文章
- [爬虫系列(二)]爬取豆瓣读书Top250,并保存每本书
- 码出高效:java开发手册_Java 11手册:Java专家分享他们在Java 11方面的最佳和最差的经验
- Android Automotive (二)系统架构
- 可见性剔除_使用分层遮挡贴图进行可见性剔除(6.实现与性能表现-2.性能表现)...
- 电竞新时代,AGON爱攻II AG272FCX到底怎么样?
- 多张CAD图纸文件怎么使用CAD转换器进行版本间的转换?
- Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 10.2 Spring Cloud Sleuth 入门
- python应用学习(六)——tkinter制作连连看小游戏
- 日本PHP的线雕产品怎么样,欧茱丽线雕安瓶怎么样?欧茱丽线雕安瓶好用吗
- 应用程序逆向分析 有道词典_逆向工程媒体应用程序(并使其中的所有故事免费)...