See
http://blogs.sun.com/ahe/entry/selftypes
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6479372
http://www.jroller.com/scolebourne/entry/java_7_self_types

Stephen


On Feb 14, 5:43 pm, Robert Fischer <[email protected]>
wrote:
> Now this is an interesting idea...
>
> (Get it?  "...*this* is an interesting idea"?)
>
> Does "This" mean an object of the same class, or the literal "this" object?  
> For instance, is this
> legal?
>
> public class Foo {
>         public This someMethod() { return new Foo(); }
>
> }
>
> ~~ Robert.
>
>
>
> JodaStephen wrote:
> > The 'self type' proposal for Java is what is needed here, not method
> > chaining:
>
> > public class Base {
> >     public This setBaseStuff() { /* ... */ return this; }
> >   }
> >   public class Sub extends Base {
> >     public This setSubStuff() { /* ... */ return this; }
> >   }
>
> > The 'This' (or 'this') used as a return type means the actual type of
> > the instance, enabling situations like this to work.
>
> > Method chaining is very hard to follow (and I oppose it), as everyone
> > has already learnt the rule that you can't invoke a method on a void.
>
> > Stephen
>
> > On Feb 14, 4:14 am, Jeff Grigg <[email protected]> wrote:
> >> After listening to recent episodes, I've been working my way back to
> >> earlier episodes, and I keep tripping over discussions of Matthias
> >> Ernst's "Chaining: A Modest Language Proposal" -- which would make the
> >> compiler enable a method chaining / "fluid interface" convention on
> >> methods returning the void type.
>
> >> I'm also somewhat bothered by the idea of reinterpreting void return
> >> types, but I think it will be helpful to consider the cases where
> >> usage would be simplified or fixed by his proposal.  So I posted two
> >> code examples on my blog:
>
> >>  http://jeffgrigg.wordpress.com/2009/02/14/method-chaining-good-for-java/
>
> >> Briefly, given these two "Builder" classes:
> >>   public class Base {
> >>     public Base setBaseStuff() { /* ... */ return this; }
> >>   }
> >>   public class Sub extends Base {
> >>     public Sub setSubStuff() { /* ... */ return this; }
> >>   }
> >> This code works:
> >>   new Sub().setSubStuff().setBaseStuff();
> >> But this code doesn't compile:
> >>   new Sub().setBaseStuff().setSubStuff();
>
> >> The problem is that when you use method chaining on classes that
> >> extend other classes and which add methods, you MUST always call
> >> subclass methods before calling superclass methods -- otherwise it
> >> won't compile.  In non-trivial examples, it gets harder and harder for
> >> the class' users to follow these rules.
>
> --
> ~~ Robert Fischer.
> Grails Training        http://GroovyMag.com/training
> Smokejumper Consultinghttp://SmokejumperIT.com
> Enfranchised Mind Bloghttp://EnfranchisedMind.com/blog
>
> Check out my book, "Grails Persistence with GORM and 
> GSQL"!http://www.smokejumperit.com/redirect.html
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to