我正在开发一个项目,该项目使用反射来获取正在运行的 Java 应用程序的字段。
我设法获取了这些字段,但我无法读取或写入它们。这是我在网上找到的一个例子:
Class aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
问题是我使用了正在运行的 jar 文件中的类,而我尝试操作的类是从类加载器中获得的。因此,我只有“.class”而不是“MyObject.class”。为了获得“MyObject”,我尝试使用 ClassLoader,但没有用。
如果我只使用“.class”:
Object value = field.get(theLoadedClass);
我会得到这个错误:
java.lang.IllegalArgumentException: Can not set int field myClass.field to java.lang.Class
谢谢。
最佳答案
这应该有帮助:
Class aClass = myClassLoader.loadClass("MyObject"); // use your class loader and fully qualified class name
Field field = aClass.getField("someField");
// you can not use "MyObject objectInstance = new MyObject()" since its class would be loaded by a different classloader to the one used to obtain "aClass"
// instead, use "newInstance()" method of the class
Object objectInstance = aClass.newInstance();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
关于Java反射题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660562/