通过反思获得方法

时间:2011-07-14 07:57:35

标签: java reflection

我以前的帖子不太清楚,对不起。我会尝试更好地举例说明我要做的事情。

我有一个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'?

3 个答案:

答案 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);