0

我正在各自的线程中创建两个对象

    Conversation c = new Conversation();
    Thread t1 = new Thread(c);
    t1.start();

    HunterCom ns = new HunterCom(c);
    Thread t2 = new Thread(ns);
    t2.start();

我需要发送对话对象 (c) 对 HunterCom 对象 (ns) 的引用

有没有办法做到这一点?我很挣扎,因为当我想将它发送到 c 时,还没有创建 ns。

4

2 回答 2

3

听起来您希望 c 和 ns 相互引用 - 即 c 引用 ns,ns 引用 c。

如果这是您所要求的,则需要在 c 中放置一个设置器,以允许您设置 HunterCom 对象:

public class Conversation{
  void setHunterCom(HunterCom a)...
}

也就是说,如果您有这样的参考周期,这通常表明需要审查的对象模型。如果你把洋葱剥开,你可能会找到一个消除循环引用的重构。这是值得做的,因为它将使您的代码在以后更容易使用。

于 2013-01-05T00:13:25.750 回答
0

一种选择是创建第三个类,它可以保留对两者的引用:

class ComManager {
    // getter and setter for Conversation
    // getter and setter for HunterCom
}

然后实例化此类并将其作为 arg 传递给您的两个对象:

ComManager com = new ComManager();
Conversation c = new Conversation(com);
HunterCom ns = new HunterCom(com);

现在,这两个对象都有一个对 的引用,它对和com都有 getter 方法,可以在它们的每个线程运行时使用。ConversationHunterCom

第二个选项是改变你实例化事物的顺序 - 创建Conversation并且HunterCom不带参数,然后像这样相互分配引用:

Conversation c = new Conversation();
HunterCom ns = new HunterCom();
c.setHunterCom(ns);
ns.setConversation(c);

可能还有其他几个类似的选项;希望这将为您提供一个起点,以找到其他模式并为您提供所需的内容。

于 2013-01-05T00:24:35.383 回答