Получение переменных и методов класса из загруженного класса. - PullRequest
0 голосов
/ 30 июля 2011

Мой сценарий:

Класс будет загружен из нескольких разных классов с использованием 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
 }
}

Поиск переполнения стека, но безуспешно: /

Любая помощь приветствуется:).

Mike.

Ответы [ 3 ]

3 голосов
/ 30 июля 2011

Я не уверен, что вы спрашиваете, но похоже, что вы хотите, чтобы динамически загружаемый класс имел доступ к полям и методам класса, содержащего код из которого был вызван 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().

Для других идей, посмотрите на этот пост .

1 голос
/ 30 июля 2011

Я бы сделал это следующим образом:

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]     .
     }

  }
}
1 голос
/ 30 июля 2011

Это достигается через Отражение .

...