Of course, if you want to simply create an object and then forward to it,
you're better off with standard mixins

instead of:

  class Foo {
    @proxy val bar = new Bar
  }

  val foo = new Foo

I would use:

  val Foo = new Foo with Bar


This requires that Bar is a trait, but that's also the recommended practice
for using @proxy

If bar is being supplied by a factory method instead of being directly
constructed, then @proxy becomes more relevant.



On Thu, Nov 26, 2009 at 11:46 AM, Graham Allan
<grundlefl...@googlemail.com>wrote:

> Having had a look at JCIP I think this is one of the cases where it is
> possible to break the rule and still be safe, but as you say the potential
> for hard-to-trace errors means you'd probably want to avoid it.
>
> Thanks Patrick.
>
> ~ Graham
>
> > It would be best to read Java Concurrency in Practice for a full
> > response. I think the answer is: there is risk involved if you publish
> > "this" from within the constructor, namely that (as far as I
> > understand it), the Java Memory Model will not guarantee that the
> > fields of the object are all set before the constructor ends, so the
> > receiver of "this" can observe a partially-constructed object. The
> > problem then is that, even if the risk were small, the potential
> > errors that could arise would be so confusing, and so hard to debug or
> > reproduce, that it's not worth the risk.
> >
> > They specifically say that making the call the last call in the
> > constructor won't help; I believe this is because the operations can
> > be reordered.
> >
> > It may be possible to get around this by forcing a flush using a
> > volatile or some kind of fence, but that could also be expensive if
> > the class if otherwise thread-bound and you are creating new instances
> > in a tight loop.
> >
> > I'm no expert in this area, this is just one "best practice" I've
> > picked up along the way.
> >
> > Regards
> > Patrick
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "The Java Posse" group.
> To post to this group, send email to javapo...@googlegroups.com.
> To unsubscribe from this group, send email to
> javaposse+unsubscr...@googlegroups.com<javaposse%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/javaposse?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javapo...@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.


Reply via email to