对象A实例化对象B.
用户与对象B交互后,我想返回到对象A. 因为对象A需要使用对象B中用户确定的结果。用户回答对象B中的问题。
在没有实例化新的Object A并将结果传递给构造函数的情况下,是否仍然可以这样做?或者这是最好的方法?我很好奇,因为不会实例化两个相同类型的对象是浪费吗?
我不想使用内部类,因为除了保持对象A简短之外,我希望其他对象能够使用Assignment类。我正在使用GUI作为用户界面。 //对象A ==主页
//Homework 1
if(e.getSource()==task[0]){
try {
AssignmentA hw1= new AssignmentA("questions.txt", 0); //creates Assignment to do
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//Homework 2 Button
else if(e.getSource()==task[1]){
try {
AssignmentA hw2= new AssignmentA("questions.txt",1);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//对象B ==作业A
- 创建问题和答案
- 用户选择答案和作业A存储作业的等级。
以下是该方案: 对象A是主页面,允许您通过按钮访问不同的分配,并包含执行多个分配后的总体成绩。对象B是一个赋值类。单击一个按钮时,将实例化对象B,并且用户必须回答问题。一旦用户完成作业,我希望能够返回具有新总成绩的对象A /主页面,而无需创建新的对象A.
我不想使用内部类,因为我还有其他想要使用Assignment类的页面。
答案 0 :(得分:1)
使用回调,例如:
interface Doer {
void doSomething(SomeClass data);
}
class B {
private Doer doer;
public B(Doer doer) {
this.doer = doer;
}
void run() {
if (something)
doer.doSomething(something);
}
}
class A implements Doer {
void doSomething(SomeClass data) {
// whatever
}
void callB() {
B b = new B(this);
b.run();
}
}
答案 1 :(得分:1)
一些想法:
以下是场景:对象A是主页面,允许您通过按钮访问不同的作业,并包含执行多项作业后的总成绩。对象B是一个赋值类。单击一个按钮时,将实例化对象B,并且用户必须回答问题。一旦用户完成作业,我希望能够返回具有新总成绩的对象A /主页面,而无需创建新的对象A.
ArrayList<B>
。每当创建并显示新的B对象时,将其添加到上面的列表中,这将允许A在需要时迭代列表,允许它查询每个B的状态。BState
,其值可能为INITIALIZED
,STARTED
,COMPLETED
,并为B提供带有getter和setter的BState变量。这样,A可以遍历列表并查看已完成的内容。BState
变量设为&#34;绑定属性&#34;通过给B一个SwingPropertyStateSupport字段和一个addPropertyChangeListener(...)
方法,将这些监听器添加到支持对象。然后,当B的BState发生变化时,它可以通知所有听众。你问:
在没有实例化新的Object A并将结果传递给构造函数的情况下,是否仍然可以这样做?或者这是最好的方法?我很好奇,因为不会实例化两个相同类型的对象是浪费吗?
答案 2 :(得分:0)
当对象A实例化对象B时,它可以将自身作为参数之一传递给构造函数。
当对象B完成任务时 - 它可以调用对象A上的方法,告诉它可以继续。
class A {
void objectBisDone() {
//....
}
void createObjB() {
B b = new B(this); // <-- pass itself to B's constructor
b.run();
}
}
class B {
A myA;
B(A a) {myA = a;} // save A as a member
void run() {
// ...
// and when B is done
myA.objectBisDone();
}
}
答案 3 :(得分:0)
在OOP中,一个抽象应公开的任何信息都应该通过公共getter方法。我的意思是:在B类中提供尽可能多的get *方法,以便对象A可以调用它们。