java 大神看过来 关于反射的问题
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package test; import java.lang.reflect.Field; /** * * @author Administrator */ public class Test { private int s; public int getS() { return s; } public void setS(int s) { this.s = s; } /** * @param args the command line arguments */ public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { Test t=new Test(); t.s=12; Class<?> c=(Class)t.getClass(); Field []f=c.getDeclaredFields(); for(int i=0;i<f.length;i++){ f[i].setAccessible(true); f[i].setInt(c,1); System.out.println(t.s); } System.out.println("hello world"); // TODO code application logic here } }
抛出了异常
Exception in thread "main" java.lang.IllegalArgumentException: Can not set int field test.Test.s to java.lang.Class
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeIntegerFieldAccessorImpl.setInt(UnsafeIntegerFieldAccessorImpl.java:128)
at java.lang.reflect.Field.setInt(Field.java:943)
at test.Test.main(Test.java:37)
C:UsersAdministratorAppDataLocalNetBeansCache8.1executor-snippetsrun.xml:53: Java returned: 1
构建失败 (总时间: 0 秒)
求大神指导。。。。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我知道啊,但是抛异常啦,找不到原因
c对象有 s属性 但c对象没有s属性 你这是往class对象中赋值阿
f.setInt(t,1) 通过反射给对象t赋值
f.
楼主视力不好,是
f[i].setInt(t,1);
不是
f[i].setInt(c,1);
参数不对,f[i].setInt(c,1); 应该是 f[i].setInt(t,1);