0

我的场景:

一个类将使用 ClassLoader 从许多不同的类中加载。

如何从加载另一个类的类中获取方法和变量 - 从另一个类?即从一个我不知道其名称的类中获取方法和变量。

例子:

public class MainClass {
 public static String str = "hey";
 public static void main(String[] args) {
  //load the OtherClass class, create an instance of it, and invoke its run method
 }
}

public class OtherClass {
 public void run() {
  //get all variables of the class that instantialized the class
 }
}

搜索了stackoverflow但没有运气:/

任何帮助表示赞赏:)。

麦克风。

4

3 回答 3

3

我不确定你在问什么,但听起来你希望动态加载的类能够访问包含run()被调用的代码的类的字段和方法。你可以这样做:

// you might need [2] in the following line
String callerClass = Thread.currentThread().getStackTrace()[1].getClassName();

这是调用当前方法的全限定类名。一旦你有了它,你就可以使用反射访问该类的字段和方法:

Class clazz = Class.forName(callerClass);
Field[] fields = clazz.getFields();
Method[] methods = clazz.getMethods();

如果您还想要不可访问的成员,请使用getDeclaredFields()and getDeclaredMethods()

有关其他想法,请查看此帖子

于 2011-07-29T21:08:42.130 回答
1

这是通过反射完成的。

于 2011-07-29T20:57:46.363 回答
1

我会这样做:

public class OtherClass {
  public void run(Object invokerObject) {
     Class invoker = invokerObject.getClass();
     Field[] fields = invoker.getFields();
     for (int i = 0; i < fields.length; i++) {
       // retrieve info from fields[i]      .
     }
     Method[] methods = invoker.getMethods();
     for (int i = 0; i < methods.length; i++) {
       // retrieve info from methods[i]     .
     }

  }
}
于 2011-07-29T21:24:52.170 回答