gpt4 book ai didi

java - 通过反射获取方法

转载 作者:行者123 更新时间:2023-12-01 15:48:15 26 4
gpt4 key购买 nike

我之前的帖子不是很清楚,抱歉。我会尽力给出一个更好的例子来说明我正在尝试做的事情。

我有一个 Java 应用程序,它将加载 .class 文件并在特殊环境中运行它们(Java 应用程序具有内置函数)注意:这不是一个库。

然后该 Java 应用程序将显示一个小程序,我想修改该小程序中的变量。

小程序的主类称为“客户端”。Java 应用程序将通过创建类“client”的新实例来加载小程序。

我已经可以访问“client”类了。 Java 应用程序会将小程序放入变量中:

Applet client = (Applet) loadedClientClass.newInstance();

所以我这样做了:

Class<?> class_client = client.getClass();

我现在可以读取和设置字段,但“客户端”类将调用其他类的函数,如下所示:

otherClass.someVoid(false);

如果我尝试这样的事情:

class_client.getDeclaredMethod("otherClass.someVoid",boolean.class);

会失败,说找不到该函数。

“otherClass”是直接类名,据我所知,它不是对该类的新实例的引用。

有什么方法可以获取'otherClass.someVoid'吗?

最佳答案

您像静态方法一样使用getDeclaredMethod(期望它从任何类返回方法),但它只从类本身返回方法。以下是调用 otherClass.someVoid(false) 的方法。

Class<?> otherClass = Class.forName("com.xyz.OtherClass"); // Get the class
Method method = otherClass.getDeclaredMethod("someVoid", boolean.class);

// If the method is an Class (ie static) method, invoke it on the Class:
method.invoke(otherClass, false);

// If the method is an instance (ie non-static) method, invoke it on an instance of the Class:
Object otherInstance = otherClass.newInstance(); // Get an instance of other class - this approach assumes there is a default constructor
method.invoke(otherInstance, false);

关于java - 通过反射获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com