反射机制:getDeclaredField和getField的区别
在做后台开发时实体的固定字段一般会抽取为一个父类,其他类继承该父类,例如主键字段,会放到一个父类中(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的区别相关推荐
- getDeclaredField和getField的区别
getDeclaredField是可以获取一个类的所有字段. getField只能获取类的public 字段. 转载于:https://www.cnblogs.com/zzw3014/p/98315 ...
- java中getfield_Java反射中getDeclaredField和getField的区别
getDeclaredField是可以获取一个类的所有字段. getField只能获取类的public 字段. public Field getDeclaredField(String name) t ...
- 详解Java反射机制------入门篇
一.什么叫Java反射机制? Java中的反射机制是指在运行状态中,对于任意一个类,能够动态获取这个类中的属性和方法:对于任意一个对象,都能够任意调用它的属性和方法.这种动态获取类的信息以及动态调用对 ...
- Java反射机制Reflection
Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...
- 反射机制讲解,js和java反射机制的区别。
JAVA为什么要用反射创建对象_为什么几乎所有的Java框架都要用到反射机制,她的魅力在哪里?..._18903290970的博客-CSDN博客说起Java的反射机制,大家应该不陌生吧,她是Java语 ...
- Java反射机制深入详解
2019独角兽企业重金招聘Python工程师标准>>> 一.概念 反射就是把Java的各种成分映射成相应的Java类. Class类的构造方法是private,由JVM创建. 反射是 ...
- Java学习之二-Java反射机制
问题: 在运行时,对一个JAVA类,能否知道属性和方法:能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现. 目录 什么是JAVA的反射机制 JDK中提供的Reflection A ...
- 反射获取list泛型_Android 从浅到懂使用反射机制
定义 Java 反射机制是发生在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法:对于任何一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为 Java ...
- 一文带你了解Java反射机制
想要获取更多文章可以访问我的博客 - 代码无止境. 上周上班的时候解决一个需求,需要将一批数据导出到Excel.本来公司的中间件组已经封装好了使用POI生成Excel的工具方法,但是无奈产品的需求里面 ...
最新文章
- php 删除硬链接,RHCE系列之文件管理----硬链接和软链接
- 十一课堂|通过小游戏学习Ethereum DApps编程(4)
- XML错误:缺少所需的空白区
- boost::process::pipe相关的测试程序
- 139.00.007 Git学习-Cheat Sheet
- python 接口测试 url_Python 接口测试之接口请求方法封装
- AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
- 网络编程mina介绍
- “互联网+”时代 软件去哪儿啦?
- 蓝桥杯青少年创意编程大赛 scratch python C++ 资料集(2022.07.08)
- 电路与电子技术课程设计报告(正弦、方波-三角波、可调矩形波、可调锯齿波发生器)
- 于娟视频:活着就是王道
- 计算机网络带宽是什么意思,带宽是什么有什么意义
- 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
- 中国云计算产业的发展趋势和当今现状
- 地图做显示定位蓝点时遇到的问题
- 华为harmonyos2.0哪里下载,华为HarmonyOS最新官方版-华为HarmonyOS2.0最新下载地址-游侠软件下载...
- python什么是调用_什么是Python中的可调用?
- python读图命令与效率汇总
- 如何利用wireshark抓取手机包