我有以下问题,不知道如何解决它。假设我们有一个类classA
,并且在这个类中是创建类本身对象的主要方法。现在我们再来一个班,classB
。在classA
的构造函数中,我们创建了classB
的对象。现在,在classB
的方法中,我们想要调用classA
。
让我举一个例子。
public class classA {
public classA() {
//some code
classB objectB = new classB();
}
public static void main(String[] args) {
classA objectA = new classA();
//more code
}
public void methodA() {
//even more code
}
}
public class classB {
public void someListener() {
//code needed to call methodA of the object objectA
}
}
问题是:代码是什么,现在只有评论//code needed to call methodA of the object objectA
?
我遇到这种情况的原因是,在我将要使用它的代码中,在objectB
中运行的各种方法由循环控制,但是一旦某个事情发生了一个方法在这里显示为objectA
必须被调用。我该怎么做?
答案 0 :(得分:2)
简单...只需将类A对象的引用传递给类B的对象。让B类存储引用并在必要时调用A的方法。
public class classA{
classA{
//some code
classB objectB = new classB(this); //------------- pass reference here
}
public static void main(String[] args){
classA objectA = new classA();
//more code
}
public void methodA(){
//even more code
}
}
public class classB{
private classA storedReference = null; //------------- you need a variable of classA to store the reference
public classB(classA passedObject){ //------------- you need an appropriare constructor
storedReference = passedObject; //------------- store the classA object reference
}
public void someListener(){
storedReference.methodA(); //------------- call methods whenever necessary
//code needed to call methodA of the object objectA
}
}
答案 1 :(得分:1)
您可以将对ClassA的引用传递给ClassB中的构造函数,例如
class ClassB(ClassA ref) {
ref.someMethod();
}
但是,如果要在正在构建的类的实例上调用方法,则需要小心。该课程可能尚未完成建设,可能处于不完整状态。
答案 2 :(得分:0)
您需要将构造函数添加到classB中,以便可以将classA作为对它的引用。
所以你的classB变成了:
public class classB {
classA cA;
public classB(classA cA) {
this.cA = cA;
}
public void someListener(){
cA.methodA();
}
}
你的classA构造函数:
classA{
//some code
classB objectB = new classB(this);
}
答案 3 :(得分:0)
在ClassB
中,您要调用ClassA
的方法。这并不难,但我相信你的关系不正确。
如果您使用的是当前代码:您需要将ClassA
的实例传递给ClassB
,这可以使用{ {1}}运营商:
this
在classB中:
public classA() {
//some code
classB objectB = new classB();
objectB.someListener(this);
}
如果您想要颠倒两者之间的关系:而不是public void someListener(classA theClassA) {
//code needed to call methodA of the object objectA
theClassA.methodA();
}
中classB
的实例依赖classA
来实现做它的工作,让classA
成为主导对象,让它包含classB
的实例。