我以前的帖子不太清楚,对不起。我会尝试更好地举例说明我要做的事情。
我有一个Java应用程序,它将加载.class文件并在特殊环境中运行它们(Java应用程序具有内置函数)注意:这不是库。
然后Java应用程序将显示一个applet,我想修改applet中的变量。
小程序的主要类称为“客户端”。 Java应用程序将通过创建类'client'的新实例来加载applet。
我已经可以访问'client'类了。 Java应用程序将把applet放在一个变量中:
Applet client = (Applet) loadedClientClass.newInstance();
所以我这样做了:
Class<?> class_client = client.getClass();
我现在可以阅读并设置字段,但'client'类会调用其他类的功能,如下所示:
otherClass.someVoid(false);
如果我尝试这样的话:
class_client.getDeclaredMethod("otherClass.someVoid",boolean.class);
它会失败,说无法找到该功能。
'otherClass'是直接的类名,据我所知,它不是对类的新实例的引用。
有没有办法获得'otherClass.someVoid'?
答案 0 :(得分:0)
如果未初始化类,则var someInteger
不存在。它是一个成员变量,因此它只存在于类的实例中。所以,你不能改变它,因为它不存在。现在,如果你把它变成一个静态变量,那么你可以改变它。
答案 1 :(得分:0)
有没有办法通过改变'otherClass.someInteger' 'mainClass'类?
没有。
但是你可以通过Class.forName
来通过OtherClass
'课程获得它:
Class<?> theOtherClazz = Class.forName("OtherClass");
然后通过theOtherClazz.getDeclaredMethod
答案 2 :(得分:0)
你像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);