大佬们,问个问题,就比如:
public class A {
private B b;
}
public static class B {
private String name;
}
怎么利用反射给A类里面的b属性赋值呢
我直接获取getDeclaredField("b")报错NoSuchFieldException
求大神解惑。
大佬们,问个问题,就比如:
public class A {
private B b;
}
public static class B {
private String name;
}
怎么利用反射给A类里面的b属性赋值呢
我直接获取getDeclaredField("b")报错NoSuchFieldException
求大神解惑。
Field field = A.class.getDeclaredField("b"); // 对于非 public 属性
field.setAccessible(true);
field.set(instance, value);
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
2020-01-01更新
昨晚9点过收到了

segmentfault
的邮件说题主回复我了,我想今天起来看看,结果今儿我一进来一看,题主并没有回复我,是segmentfault
的推送太延迟了。。。囧,不过我滚着屏幕发现题主给另一个回答者回复了,我就看了哈评论,题主是这么回复的感觉像是在回复我似的,哈哈哈,因为我让他仔细

debug
看看是不是我说那种唯一可能,就是我也看了哈题主的回复,感觉就是因为把
class
当成参数传入另一个方法里就不行了,如果不当参数传在外面使用就可以,我惊了!还有这种玩意儿,我都是瞬间都思考到了什么虚拟机的特殊处理或者是什么我没见过的奇怪语法之类的,于是我也copy
了题主的回复试试看没想到,啊嘿,真没错,确实报错了,只要调用方法就报错了(震惊!
震惊之余马上

debug
,不过我刚一debug
一看,泄气了,瞬间就想打题主了。。。搁这瞅清楚了,这个时候的

class
是啥啊?。。。对,没错,竟然是java.lang.Class
,回过头我赶紧看了哈题主的方法那里面咋写的害,这回瞅清楚了。。。这不就是我说的调用
getDeclaredField
的class
和传入的字段名不匹配嘛题主,咋都已经是
class
但还要去getClass
呢,题主你合计合计,要是你把方法里的代码放外边写那可就变成了这样了是不是炒鸡奇怪。。。(要套娃警告的哈
最后总结哈吧。。。其实题主还是没有学会怎么去
debug
吧,这个东西认真debug
,其实绝对看得出来的。不过也都是这么过来的,都有犯蠢的时候,最后祝题主新年快乐咯~
以下是原答案
题主看你都用
getDeclaredField
方法了,按道理被声明的变量都会被查出来,既然你没有查出来,我感觉只有一种可能(铛铛铛!)就是:你调用getDeclaredField的Class和你传入的字段名字不匹配(狗头
要么
class
写错了,要么是字段名字写错了emmm,
class
写错了几率不大,再差也只是眼花看错了但是字段名,是个字符串,不知道你真实代码里是怎么写的,虽然你贴出来的样子是
"publicConfiguration"
,谁知道你代码里是不是这么写的,也许还是传入了一个字符串变量,谁又知道你的字符串变量是从哪里获取的(悄悄告诉你哈:字符串看起来是想象的样子,但是没准里面加了一个什么你看不到的符号,比如我自己遇到过的这个玩意儿
\uFEFF
,这个玩意儿是读文件的时候发现的,所以你可以尝试debug
的时候watch
一下,用这里的字符串copy
出去到断点看看你的变量是不是和你copy
的equals
)最后,我宁愿相信人会出错,也不会相信机器会出错~哈哈哈哈