浏览 199 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-05-31
比如定义如下class
public class ClassA{
private int field0=100;
}
ClassA应该保存了field0的默认值100,但是无论Class或者Field类的API都未提供如何拿到这个默认值的方法。有知情人望告知一下,谢谢 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-01
为这个变量写一个SET方法通过方法反射进行赋值
public Object setFileMethodInvoke(Object obj,String fieldName,Object value) throws Exception{ //获得对象的类型 Class classType=obj.getClass(); // System.out.println("该对象的类型是:"+classType.toString()); //通过默认构造方法去创建一个新的对象,getConstructor的视其参数决定调用哪个构造方法 // Object objectCopy=classType.getConstructor(new Class[]{}).newInstance(new Object[]{}); //获得对象的所有属性 // Field[] fields=classType.getDeclaredFields(); Field field=classType.getDeclaredField(fieldName); String stringLetter=fieldName.substring(0, 1).toUpperCase(); //获得相应属性的getXXX和setXXX方法名称 // String getName="get"+stringLetter+fieldName.substring(1); String setName="set"+stringLetter+fieldName.substring(1); System.out.println("aaaaaaa::::"+setName+"::"+value); //获取相应的方法 // Method getMethod=classType.getMethod(getName, new Class[]{}); Method setMethod=classType.getMethod(setName, new Class[]{field.getType()}); System.out.println("aaaaaaa::::"+setMethod+":::"+value); //调用源对象的getXXX()方法 // Object value=getMethod.invoke(obj, new Object[]{}); // System.out.println(fieldName+" :"+value); //调用拷贝对象的setXXX()方法 setMethod.invoke(obj,new Object[]{value}); return obj; } |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-01
…………
可能我没说清楚,我的意思是,当类未实例化的时候…… 也就是比方说,我拿到ClassA.class这个Class对象时如何获取初值 当然,ClassA.class.newInstance().getDeclaredMethod("someString").invoke()的确可以…… 总而言之多谢了,一个下午都没找到Class类里面类似功能的API,包括Javassist里的CtClass类,所以……一会直接考虑这样做算了 |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-02
Class a=ClassA.class;
Object o=a.newInstance(); //不这样如何获得初值 Field f=a.getDeclaredField("field0"); f.setAccessible(true); System.out.print(f.get(o)); |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-03
maybe723 写道 Class a=ClassA.class;
Object o=a.newInstance(); //不这样如何获得初值 Field f=a.getDeclaredField("field0"); f.setAccessible(true); System.out.print(f.get(o)); 关键是调用 newInstance,本身也是 class.getConstructor().invoke()出来的玩意,那么构造函数尤其是比如默认构造函数如何知道这些值的初值??显然应该在类文件里面保存一个常量池,保存了这些值才对 不过我是这么认为,但是Class类没有提供API拿到这些常量,我的意思也就是如何拿到这个常量值里面的常量映射关系和值 |
|
| 返回顶楼 | |



