Java反射题

标签 java reflection jar illegalargumentexception

我正在开发一个项目,该项目使用反射来获取正在运行的 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/

相关文章:

java - 使用 Maven 可以实现 Angular 延迟加载模块

java - 如何在 Android Firebase 数据库帖子中添加更多参数?

c# - 如何通过仅发送类的名称而不是类本身作为参数来获取类的类型?

JavaFX : Need help understanding project hierarchy issues

java - 无法使用 GSON 比较两个 json 文件

java - 重新绘制 JPanel 会略微移动其上的图像

java - 有没有办法通过反射识别 Java 16 记录的规范构造函数?

java - 这个类/模板的用法在 Java 中意味着什么?

java - 我如何用 jre 编译 .jar?

java - 如何替换 jar 文件中的类文件?