在做后台开发时实体的固定字段一般会抽取为一个父类,其他类继承该父类,例如主键字段,会放到一个父类中(IdEntity),其他类继承该类,但是我们在操作时操作的是子类,在通过子类获取父类属性是getDeclaredField和getField是不一样的,简单说

  • getDeclaredFiled 仅能获取类本身的属性成员(包括私有、共有、保护)
  • getField 仅能获取类(及其父类可以自己测试) public属性成员

因此在获取父类的私有属性时,要通过getSuperclass的之后再通过getDeclaredFiled获取。

父类,出去id作为父类字段

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;import org.hibernate.annotations.GenericGenerator;
@MappedSuperclass
public abstract class IdEntity {private String id;@Id@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")@Column(name ="ID",nullable=false,length=32)public String getId() {return id;}public void setId(String id) {this.id = id;}}

子类


public class Reflect extends IdEntity {public String publicField;private String privateField;public Reflect(String publicField, String privateField) {super();this.publicField = publicField;this.privateField = privateField;}public String getPrivateField() {return privateField;}public void setPrivateField(String privateField) {this.privateField = privateField;}}

测试类:

import java.lang.reflect.Field;public class ReflectDemo {/*** @Description: TODO* @param @param args* @return void* @throws SecurityException* @throws NoSuchFieldException* @throws IllegalAccessException* @throws IllegalArgumentException* @throws* @author ydecai* @date 2019-1-23*/public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {Reflect re = new Reflect("zhangsan", "lisi");re.setId("111");//getDeclaredFiled获取本类属性
//      Field publicField = re.getClass().getDeclaredField("publicField");
//      System.out.println(publicField.get(re));Field publicField = re.getClass().getField("publicField");System.out.println(publicField.get(re));//getField获取公有属性,包括父类的,下面语句报错//Field privateField = re.getClass().getField("privateField");Field privateField = re.getClass().getDeclaredField("privateField");privateField.setAccessible(true);System.out.println(privateField.get(re));//获取父类私有属性并获取值Field fileId = re.getClass().getSuperclass().getDeclaredField("id");fileId.setAccessible(true);System.out.println(fileId.get(re));}}

反射机制:getDeclaredField和getField的区别相关推荐

  1. getDeclaredField和getField的区别

    getDeclaredField是可以获取一个类的所有字段.  getField只能获取类的public 字段. 转载于:https://www.cnblogs.com/zzw3014/p/98315 ...

  2. java中getfield_Java反射中getDeclaredField和getField的区别

    getDeclaredField是可以获取一个类的所有字段. getField只能获取类的public 字段. public Field getDeclaredField(String name) t ...

  3. 详解Java反射机制------入门篇

    一.什么叫Java反射机制? Java中的反射机制是指在运行状态中,对于任意一个类,能够动态获取这个类中的属性和方法:对于任意一个对象,都能够任意调用它的属性和方法.这种动态获取类的信息以及动态调用对 ...

  4. Java反射机制Reflection

    Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...

  5. 反射机制讲解,js和java反射机制的区别。

    JAVA为什么要用反射创建对象_为什么几乎所有的Java框架都要用到反射机制,她的魅力在哪里?..._18903290970的博客-CSDN博客说起Java的反射机制,大家应该不陌生吧,她是Java语 ...

  6. Java反射机制深入详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.概念 反射就是把Java的各种成分映射成相应的Java类. Class类的构造方法是private,由JVM创建. 反射是 ...

  7. Java学习之二-Java反射机制

    问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...

  8. 反射获取list泛型_Android 从浅到懂使用反射机制

    定义 Java 反射机制是发生在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法:对于任何一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为 Java ...

  9. 一文带你了解Java反射机制

    想要获取更多文章可以访问我的博客 - 代码无止境. 上周上班的时候解决一个需求,需要将一批数据导出到Excel.本来公司的中间件组已经封装好了使用POI生成Excel的工具方法,但是无奈产品的需求里面 ...

最新文章

  1. php 删除硬链接,RHCE系列之文件管理----硬链接和软链接
  2. 十一课堂|通过小游戏学习Ethereum DApps编程(4)
  3. XML错误:缺少所需的空白区
  4. boost::process::pipe相关的测试程序
  5. 139.00.007 Git学习-Cheat Sheet
  6. python 接口测试 url_Python 接口测试之接口请求方法封装
  7. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
  8. 网络编程mina介绍
  9. “互联网+”时代 软件去哪儿啦?
  10. 蓝桥杯青少年创意编程大赛 scratch python C++ 资料集(2022.07.08)
  11. 电路与电子技术课程设计报告(正弦、方波-三角波、可调矩形波、可调锯齿波发生器)
  12. 于娟视频:活着就是王道
  13. 计算机网络带宽是什么意思,带宽是什么有什么意义
  14. 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
  15. 中国云计算产业的发展趋势和当今现状
  16. 地图做显示定位蓝点时遇到的问题
  17. 华为harmonyos2.0哪里下载,华为HarmonyOS最新官方版-华为HarmonyOS2.0最新下载地址-游侠软件下载...
  18. python什么是调用_什么是Python中的可调用?
  19. python读图命令与效率汇总
  20. 如何利用wireshark抓取手机包

热门文章

  1. 按照班级,统计班级的总人数,男生人数和女生人数分别是多少
  2. 华为手表使用自制表盘
  3. Route Health Injection(RHI)基础配置
  4. nexus6p如何跳过正在检查网络连接?
  5. 银河麒麟桌面操作系统V10-常见运维问题类别:系统使用 02
  6. IP地址定位查询技术,不管对方在哪,轻轻松松查到他的位置
  7. 两种方法对浮点数开根号(二分法和牛顿法,含证明)
  8. 网络协议:简析三次握手协议
  9. unity给头发添加物理_unity3d Hair real time rendering 真实头发实时渲染
  10. 简介------Comparable接口介绍及冒泡排序