向对象发送对尚未创建的另一个对象的引用...

时间:2013-01-04 23:57:47

标签: java reference

我在他们自己的线程中创建两个对象

    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,所以我很难想象。

2 个答案:

答案 0 :(得分:3)

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

如果这是你要求的,你需要在c中设置一个允许你设置HunterCom对象的setter:

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

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

答案 1 :(得分: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,它具有ConversationHunterCom的getter方法,可以在每个线程运行时使用。

第二个选项是更改实例化事物的顺序 - 创建ConversationHunterCom,不带参数,然后像这样分配彼此的引用:

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

可能还有其他几个类似的选择;希望这会给你一个起点,找到其他模式,并为你找到你想要的东西。