从加载的类中获取类的变量和方法。

时间:2011-07-29 20:55:05

标签: java variables classloader urlclassloader

我的情景:

将使用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但没有运气:/

任何帮助表示赞赏:)。

麦克

3 个答案:

答案 0 :(得分: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()getDeclaredMethods()

对于其他想法,请查看this post

答案 1 :(得分:1)

这是通过Reflection完成的。

答案 2 :(得分: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]     .
     }

  }
}