看了前面的那个文章之后,我就开始了解了一下sun.reflect下面的类,看到一个ReflectionFactory这个类的一个newXXXX的方法,我想如果可以给Class随便添加方法,字段的话,那么岂不是可以随便构造类型了,哈哈,感觉很好玩,于是先写了一个测试,调用newField方法,添加一个字段看看是否可以。可是遇到一些问题,现在是百思不得其解阿。贴出来,大家看看。
import java.lang.reflect.Field;
import sun.reflect.ReflectionFactory;
public class T {
public static void main(String[] arg) throws Exception {
T3 t3 = new T3();
T3 t32 = new T3();
ReflectionFactory rf = ReflectionFactory.getReflectionFactory();
Field f2 = rf.newField(T3.class, "newFiled", int.class, 1, 1);
System.out.println("Field Class:" + f2.getDeclaringClass());
f2.set(t3, new Integer(20));
System.out.println("t3 value:" + f2.get(t3));
System.out.println("t32 value:" + f2.get(t32));
Field f = t3.getClass().getField("newFiled");
f.set(t3, new Integer(20));
System.out.println(f.get(t3));
}
}
class T3 {
String value;
/**
* 获得****
* @return 返回 value。
*/
public String getValue() {
return value;
}
/**
* ****属性的方法
* @param value 要设置的 value。
*/
public void setValue(String value) {
this.value = value;
}
}
现在总是抛出来一个异常,NoSuchFieldException,可是前面明明可以得到,为什么还会抛出来异常,感觉很奇怪。现在的理解是方法(Filed)已经挂上类(Class)了,可是类病没有挂上这个方法,也只能这么理解了
Field Class:class t.T3
t3 value:20
t32 value:0
java.lang.NoSuchFieldException: newFiled
at java.lang.Class.getField(Class.java:919)
at t.T.main(T.java:29)
Exception in thread "main"
分享到:
相关推荐
jdk1.8的src,扩展了sun.reflect,unsafe。
scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException 安装这个版本的scrcpy即可。
解决axis2-CodegenWizardPlugin的BUG,java.lang.reflect.InvocationTargetException 带有相关jar 包及相关文件
java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke...
MyEclipse axis2 wsdl java.lang.reflect.invocationtargetexception code gen 大家要注意一定要仔细,这个问题基本上缺少包引起的,而且一定要clean 如果需要axis2插件 以及这个plugins中的包在我的其他资源里面有
MyEclipse6.0下axis2插件的安装! 解决java.lang.reflect.InvocationTargetException本人亲自测试,完美使用!
NULL 博文链接:https://inter12.iteye.com/blog/1288117
// import static org.fest.reflect.core.Reflection.*; // Loads the class 'org.republic.Jedi' Class jediType = type("org.republic.Jedi").load(); // Loads the class 'org.republic.Jedi' as 'org.repu
免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect....
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at ...
NULL 博文链接:https://kdisk-sina-com.iteye.com/blog/258942
这意味着像sun.misc和sun.reflect这样的非标准包对你的包不可用,即使它们是常用的。 解决此问题的最简单方法是使用扩展包。 这是一个片段包,除了如下所示的清单外,不包含任何内容: Export-Package: sun.misc...
java反射(reflect)
java 反射实战demo,Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。...
java.lang.reflect.invocationtargetexception问题的解决方法之一
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap...
Boost Reflect是一款基于C++实现的开源反射库,类似java反射。 不过年代稍远,最近的更新也是8年前了。 git地址:https://github.com/bytemaster/boost_reflect
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1....