我的情景:
将使用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但没有运气:/
任何帮助表示赞赏:)。
麦克
答案 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] .
}
}
}