使用一个类(classsA)中的方法,其中使用反射api java加载另一个类(classB)

使用一个类(classsA)中的方法,其中使用反射api java加载另一个类(classB),java,api,class,reflection,dynamic,Java,Api,Class,Reflection,Dynamic,我有如下要求。我使用java中的反射加载了一组类[存在于jar文件中]。现在在loaded类中,我想调用loading类中的某些方法 例如,假设有A类和B类。使用反射,我从类A加载类B。因此,我可以从类A使用类B中的方法。但我想从类B使用类A中的一些方法 非常感谢你的帮助 谢谢。您可以让classB实现一个方法,通过该方法您可以提供classA的实例,然后从classB内部使用该实例。您只能通过显式地告诉classB的实例有关classA,例如通过调用 b.setA(this) 从a中,您可以

我有如下要求。我使用java中的反射加载了一组类[存在于jar文件中]。现在在loaded类中,我想调用loading类中的某些方法

例如,假设有A类和B类。使用反射,我从类A加载类B。因此,我可以从类A使用类B中的方法。但我想从类B使用类A中的一些方法

非常感谢你的帮助


谢谢。

您可以让classB实现一个方法,通过该方法您可以提供classA的实例,然后从classB内部使用该实例。

您只能通过显式地告诉classB的实例有关classA,例如通过调用

b.setA(this)

a

中,您可以坚持您的类B(加载的类)有一个以a为参数的构造函数:

class B {
    public B(A a) {
        // etc...
    }
}
然后在反射代码中,用该构造函数实例化该类。B现在可以对A执行任何需要的操作。您可以为特定构造函数创建一个新实例,如下所示:

Class<B> clazz = B.class;
clazz.getConstructor(new Class[] {A.class}).newInstance(a);
Class clazz=B.Class;
getConstructor(新类[]{A.Class}).newInstance(A);

这似乎是个错误的设计。试着重新思考一下。您当前的设置可以通过应用单例模式解决。例如:

abstract class SomeSingleton {

    private static SomeSingleton instance;

    public static void setInstance(SomeSingleton instance) {
        this.instance = instance;
    }

    public static SomeSingleton getInstance() {
        return instance;
    }

    public abstract void someMethod();
}

class ClassA extends SomeSingleton {

    public ClassA() {
        SomeSingleton.setInstance(this);
    }

    @Override
    public void someMethod() {
        System.out.println("some methid is called");
    }
}

class ClassB {

    public void aMethod() {
        SomeSingleton.getInstance().someMethod();
    }
}

这样一来,ClassB就不必知道ClassA了。它只知道一项服务。ClassA向某个Singleton报告它可以提供服务。-所以每个人都很高兴。

如果我的回答不符合您的需要,请提供更多细节。