假设您有两个A和B类。如果两者之间的关系是-a
即。 A有一个B
如何将信息从B传递到A?比如在B中说出你计算出来并需要A中的答案。
除了将指向A类的指针传递给B类并调用一个以答案作为参数的函数之外,还有其他方法吗?
希望这是有道理的,
MD。
抱歉,我应该更具体
引用我的评论。
“好吧我给出了一个简单的例子。我在java中编程,我的类B运行一个新的线程并且将计算答案。因此我不能只调用A类中的函数,因为我不知道什么时候计算将完成。“
答案 0 :(得分:4)
A中需要计算结果的方法应该调用B中进行计算的方法。
这个答案很明显,可能有些东西你没告诉我们(?)
好的,问题就在于线程问题。是的,然后传递对所有者对象的引用并回调它可能是个好主意。更好的想法可能是返回封装计算结果的future object。
答案 1 :(得分:1)
如果我理解正确,你就有这种关系:
class Car {
Engine engine;
int test() {
int fuelLevel = engine.getFuelLevel();
// do sth with fuel level, store it, use it etc.
}
}
此示例显示如何在两个类之间传递信息:例如,作为函数的结果。 Car对象(您的A类)调用Engine对象(B类)上的方法,并通过这种方式获取所需信息。这可以很容易地转化为B类所做的任何工作。
答案 2 :(得分:1)
管理“异步”调用基本上有两种方法。 第一个是回调和另一个轮询。 有一个回调是你所描述的。当B完成后,它需要以某种方式调用A它已经完成。这可以通过“给”A到B的地址来完成,因此它知道要调用什么,或者使用中间对象C,它同步调用B并将结果发送回A.然后需要知道A.
轮询是指如果B已经完成,则定期检查。这种解决方案在智力上通常不太令人满意,而且CPU消耗更多。 B完成时也不会通知您。 (当B完成时,没有任何事情发生,你将不得不等待下一次民意调查才能意识到这一点)。但是,通过这种方式,B不需要了解A。
我会使用带有中间对象的第一个模式(和特殊的C类)。这样你的模型仍然是干净的(B不需要知道A或C)。我建议您查看Observer pattern。