java 反射 getDeclaredField和getField的区别
来源:互联网 发布:淘宝网店改名字 编辑:程序博客网 时间:2024/06/05 10:49
getDeclaredField是可以获取一个类的所有字段.
getField只能获取类的public 字段.
getField其实调用的是getField0.
他们最后都调用了searchFields.
不过getDeclaredField传入的是privateGetDeclaredFields(false),
getField传入的是privateGetDeclaredFields(true),
可以看到传入条件为true的时候使用的是declaredPublicFields,意思是public字段
为false的时候使用的是declaredFields.
当然declaredFields和declaredPublicFields最终的来源是
可惜这是个native方法.感觉java就是很无奈,发现都是native方法档在路上.
getField只能获取类的public 字段.
- public Field getDeclaredField(String name)
- throws NoSuchFieldException, SecurityException {
- checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader());
- Field field = searchFields(privateGetDeclaredFields(false), name);
- if (field == null) {
- throw new NoSuchFieldException(name);
- }
- return field;
- }
- rivate Field getField0(String name) throws NoSuchFieldException {
- Field res = null;
- // Search declared public fields
- if ((res = searchFields(privateGetDeclaredFields(true), name)) != null) {
- return res;
- }
- ......
getField其实调用的是getField0.
他们最后都调用了searchFields.
不过getDeclaredField传入的是privateGetDeclaredFields(false),
getField传入的是privateGetDeclaredFields(true),
- private Field[] privateGetDeclaredFields(boolean publicOnly) {
- checkInitted();
- Field[] res = null;
- if (useCaches) {
- clearCachesOnClassRedefinition();
- if (publicOnly) {
- if (declaredPublicFields != null) {
- res = (Field[]) declaredPublicFields.get();
- }
- } else {
- if (declaredFields != null) {
- res = (Field[]) declaredFields.get();
- }
- }
可以看到传入条件为true的时候使用的是declaredPublicFields,意思是public字段
为false的时候使用的是declaredFields.
当然declaredFields和declaredPublicFields最终的来源是
- private native Field[] getDeclaredFields0(boolean publicOnly);
可惜这是个native方法.感觉java就是很无奈,发现都是native方法档在路上.
0 0
- java 反射 getDeclaredField和getField的区别
- java反射getDeclaredField和getField的区别
- java反射中getDeclaredField和getField的区别
- Java反射之getDeclaredField和getField的区别
- getField 和 getDeclaredField 的区别
- java反射机制——getMethod/getField与getDeclaredMethod/getDeclaredField区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- getField getDeclaredField
- Java反射之getDeclaredField()
- java反射机制中的getDeclaredField()
- thinkphp查询的getField(),select()和find()的区别
- java 反射机制 之 getDeclaredField 获取私有保护字段, 再setAccessible(true)取消对权限的检查 实现对私有的访问和赋值
- java getDeclaredField
- thinkphp中field()和getfield()区别
- thinkPhp3.2 field和getField区别
- linux下源码安装GCC
- ArrayAdapter,SimpleAdapter,BaseAdapter
- (超高性价比)有了PLC上网神器,PLC远程监视,PLC远程监控,构建工业物联网很简单
- C#多线程学习(五) 多线程的自动管理(定时器)
- Android之PowerManager&BatteryManager
- java 反射 getDeclaredField和getField的区别
- 自定义右侧滑动栏 仿联系人
- 32位linux系统下mongodb安装出现的问题
- Qt使用教程之使用Qt Quick UI表单(三)
- 一起看代码来玩玩QT之06EventFilter (事件过滤)
- kidd风的IOS日志之学习用MetalPerformanceShaders进行图像处理(模糊效果)
- xfsdump备份测试
- HTTP 请求方式: GET和POST的比较
- C#多线程学习(六) 互斥对象