Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!news.albasani.net!.POSTED!not-for-mail From: Lew Newsgroups: comp.lang.java.programmer Subject: Re: Automatic linking of related objects in constructor Date: Wed, 29 Jun 2011 07:28:04 -0400 Organization: albasani.net Lines: 33 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: news.albasani.net VledSYuU06IbeewS8aiziZtWV/Cw0Td5FWViADM4RfU10BbHy3TstVH2Zq+h98WN/5LIPid1tYyvwynWQ3/78bonJw6n4dv5mj4ZYI8t74U7O0A2DQoHf8guI6UFdrEK NNTP-Posting-Date: Wed, 29 Jun 2011 11:27:59 +0000 (UTC) Injection-Info: news.albasani.net; logging-data="r9GCcti/f0QrDJXbS3HR4IKbd8Qj4jsEirPMbxi2pBV2ndu6BZzUVCMucCmOtIznXe0y0n+NBqAm2lfPhDXPucGJStdGPm6XQ+KMfoAQRqdv4FMTwrYMCxWERYuQgd4I"; mail-complaints-to="abuse@albasani.net" User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110424 Thunderbird/3.1.10 In-Reply-To: Cancel-Lock: sha1:7p57wUcx8INxiwnnyUMPJU8u0GE= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:5772 Qu0ll wrote: > Suppose you have class A which contains a list of objects of class B and that > the constructor for B takes in a reference to the A object which is to include > it in said list. Is it safe to make a call to A's method addB(B b) in that B > constructor passing in "this"? I have heard that it's bad practice to "leak" a > reference to an object from within its own constructor because it may be in an > invalid state. > > If not, how else can I automatically add the B object to the list in A without > forcing the client programmer to explicitly call addB() given that they have > already passed in the B as an argument? I would have 'A' call its own 'addB( theB )' just after calling 'new B()': public class A { private List daBs = ...; public void theMethod() { daBs.add( new B(this) ); ... } } No leakage. The add occurs after construction of the 'B' finishes. You are correct to worry about leakage. The idiom shown here guarantees that 'B' has its everything done before the list addition can occur. -- Lew Honi soit qui mal y pense. http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg