A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2013-8-21 10:19  /  1206 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 清心玉质 于 2013-8-21 15:19 编辑

getDeclaredField和getFiled有什么区别

6 个回复

倒序浏览
前者可以获得私有的东西  method和 Constructor都有对应的两个方法
回复 使用道具 举报
getFiled只能获取公共的成员变量。
getDeclaredField可以获取所有声明的成员变量。
反射里面你只要看到没加Declared这个单词的就都只能获取被public修饰的成员、构造函数。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
其中getField用于返回一个指定名称的属性,但是这个属性必须是公有的,这个属性可以在父类中定义。如果是私有属性或者是保护属性,那么都会抛出异常提示找不到这个属性。getFields则是返回类型中的所有公有属性,所有的私有属性和保护属性都找不到。getDeclaredField获得在这个类型的声明中定义的指定名称的属性,这个属性必须是在这个类型的声明中定义,但可以使私有和保护的。getDeclaredFields获得在这个类型的声明中定义的所有属性,包括私有和保护的属性都会被返回,但是所有父类的属性都不会被返回。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
薛淑凯 发表于 2013-8-21 10:30
前者可以获得私有的东西  method和 Constructor都有对应的两个方法

不能获取私有的吧,我试验了一下怎么不能获取呢
回复 使用道具 举报
清心玉质 发表于 2013-8-21 12:14
不能获取私有的吧,我试验了一下怎么不能获取呢

那就要暴力反射,加上setAccessible(true) 该方法取消字段的权限检查,然后就可以反射私有成员变量了
回复 使用道具 举报
getDeclaredField:获取字节码文件中的所有字段,包括私有的,但是当你使用的时候,必须通过setAccessible方法对其访问设置为true之后,就可以对该私有对象进行获取和设置了
getFiled :只能获取公共的字段
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马